2 条题解
-
0yxh LV 9 @ 2016-01-10 18:25:04
虽然我没有AC但我来抢个沙发
-
-12021-07-21 09:26:43@
#include<bits/stdc++.h> char ch[2000]; const int n[10]={0b1111011,//0 0b1001000,//1 0b0111101,//2 0b1101101,//3 0b1001110,//4 0b1100111,//5 0b1110111,//6 0b1001001,//7 0b1111111,//8 0b1101111//9 }; struct num{//数字 int val;//权值 int des;//描述 /* _ 1 |_| 2 3 4 |_| 5 6 7 */ /* 7 6 5 4 3 2 1 1 4 7 1 0 0 1 0 0 0 2 1 3 4 5 6 0 1 1 1 1 0 1 3 1 3 4 6 7 1 1 0 1 1 0 1 4 2 3 4 7 1 0 0 1 1 1 0 5 1 2 3 6 7 1 1 0 0 1 1 1 6 1 2 3 5 6 7 1 1 1 0 1 1 1 7 1 4 7 1 0 0 1 0 0 1 8 1 2 3 4 5 6 7 1 1 1 1 1 1 1 9 1 2 3 4 6 7 1 1 0 1 1 1 1 0 1 2 4 5 6 7 1 1 1 1 0 1 1 */ bool check(){//检验是否合法 for(int i=0;i<10;i++) if(val==n[i]) return true; return false; } bool check(int w){//检验第w根是否存在 if(val>>w&1!=0)return true; return false; } bool change(int w){//更改w根的位置 val^=(1<<w); } int get(){ for(int i=0;i<10;i++) if(val==n[i]) return i; } num(int _N=0,int Wi=0,int type=0){//_N表示数值 Wi表示位置 val=n[_N]; des=type*pow(10,Wi); } }a[2000]; bool check(num *t,int L){//检查 int num=0; for(int i=1;i<=L;i++){ if(!t[i].check())return false; num+=t[i].des*t[i].get(); } return num==0; } int tot=0; signed main(){ //freopen("t.in","r",stdin); int len=0,eq=1; while(true){ ch[++len]=getchar(); if(ch[len]=='#')break; } while(ch[eq]!='=')eq++; //分别处理等号前后 //把右边的等价到左边 for(int i=len-1,j;i>eq;i=j-1){ j=i; while(j-1>0&&isdigit(ch[j-1]))j--; int type=-1; if(ch[j-1]=='-')type=1; for(int w=i;w>=j;w--) a[++tot]=num(ch[w]-'0',i-w,type); if(ch[j-1]=='+'||ch[j-1]=='-')j--; } for(int i=eq-1,j;i>=1;i=j-1){ j=i; while(j-1>0&&isdigit(ch[j-1]))j--; int type=1; if(ch[j-1]=='-')type=-1; for(int w=i;w>=j;w--) a[++tot]=num(ch[w]-'0',i-w,type); if(ch[j-1]=='+'||ch[j-1]=='-')j--; } //for(int i=1;i<=tot;i++) // printf("%d*%d ",a[i].get(),a[i].des); check(a,tot); for(int i=1;i<=tot;i++) for(int j=0;j<8;j++)//枚举拿走的火柴 if(a[i].check(j)) for(int w=1;w<=tot;w++) for(int k=0;k<8;k++) if(!a[w].check(k)){ //将i的j放到w的k上 a[i].change(j); a[w].change(k); if(check(a,tot)){ int p=tot; for(int i=1;i<=len;i++) if(isdigit(ch[i]))putchar(a[p--].get()+'0'); else putchar(ch[i]); return 0; } a[i].change(j); a[w].change(k); } printf("No"); return 0; }
- 1
信息
- ID
- 1840
- 难度
- 8
- 分类
- (无)
- 标签
- 递交数
- 35
- 已通过
- 5
- 通过率
- 14%
- 被复制
- 2
- 上传者