猜数字 HDU 1172
一道模拟题:水爆了!!竞无从下手
就是暴力枚举!!
1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 using namespace std; 5 struct line 6 { 7 int x; 8 int y; 9 int z; 10 }a[105]; 11 int main() 12 { 13 int a1[5],b2[5]; 14 int n,i,j,k,k1,w,sum; 15 while(scanf("%d",&n)!=EOF) 16 { 17 if(n==0) 18 break; 19 for(i=1;i<=n;i++) 20 scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z); 21 sum=0; 22 for(i=1000;i<=9999;i++) 23 { 24 int d1=0; 25 a1[1]=i%10; 26 a1[2]=(i/10)%10; 27 a1[3]=(i/100)%10; 28 a1[4]=i/1000; 29 for(j=1;j<=n;j++) 30 { 31 int d=0,vis[5]={0}; 32 b2[1]=a[j].x%10; 33 b2[2]=(a[j].x/10)%10; 34 b2[3]=(a[j].x/100)%10; 35 b2[4]=a[j].x/1000; 36 for(k=1;k<=4;k++) 37 if(a1[k]==b2[k]) 38 d++; 39 if(d!=a[j].z) 40 { 41 d1=1; 42 break; 43 } 44 d=0; 45 for(k=1;k<=4;k++) 46 for(k1=1;k1<=4;k1++) 47 if(a1[k]==b2[k1]&&!vis[k1]) 48 { 49 vis[k1]=1; 50 d++; 51 break; 52 } 53 if(d!=a[j].y) 54 { 55 d1=1; 56 break; 57 } 58 } 59 if(d1==0) 60 { 61 sum++; 62 w=i; 63 } 64 if(sum==2) 65 { 66 break; 67 } 68 } 69 if(sum==2) 70 printf("Not sure "); 71 else 72 printf("%d ",w); 73 } 74 return 0; 75 }
HDU Today HDU 2112 参见:http://www.cnblogs.com/tt123/p/3240066.html
棋盘问题 POJ 1321
dfs();先搜列,再搜行。。。
一定不能同时搜行和列!!!
1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 using namespace std; 5 char a[10][10]; 6 int sum,n,m; 7 int add(int x,int y) 8 { 9 int i; 10 for(i=0;i<n;i++) 11 if(a[x][i]=='1') 12 return 0; 13 for(i=0;i<n;i++) 14 if(a[i][y]=='1') 15 return 0; 16 return 1; 17 } 18 void dfs(int x,int t) 19 { 20 if(t==m) 21 { 22 sum++; 23 return ; 24 } 25 if(x>=n) 26 return ; 27 for(int i=0;i<n;i++) 28 if(a[x][i]=='#'&&add(x,i)) 29 { 30 a[x][i]='1'; 31 dfs(x,t+1); 32 a[x][i]='#'; 33 } 34 dfs(x+1,t); 35 } 36 int main() 37 { 38 while(scanf("%d%d",&n,&m)!=EOF) 39 { 40 if(n==-1&&m==-1) 41 break; 42 for(int i=0;i<n;i++) 43 scanf("%s",a[i]); 44 sum=0; 45 dfs(0,0); 46 printf("%d ",sum); 47 } 48 return 0; 49 }
Dirichlet's Theorem on Arithmetic Progressions POJ 3006
一个素数问题!直接进行判断就行了!!!(注意1的情况)
1 #include<iostream> 2 #include<algorithm> 3 #include<stdio.h> 4 #include<math.h> 5 using namespace std; 6 int add(int x) 7 { 8 int d; 9 if(x==1) 10 return 0; 11 d=sqrt((double)x); 12 for(int i=1;i<=d;i++) 13 if(x%i==0&&i!=1) 14 return 0; 15 return 1; 16 } 17 int main() 18 { 19 int n,m,t,i,d; 20 while(scanf("%d%d%d",&n,&m,&t)!=EOF) 21 { 22 if(n==0&&m==0&&t==0) 23 break; 24 d=0; 25 for(i=n;;i+=m) 26 { 27 if(add(i)) 28 d++; 29 if(d==t) 30 break; 31 } 32 printf("%d ",i); 33 } 34 return 0; 35 }
Balance POJ 1837