A
题意:给出起点(0,0)以及终点(x,y),再给出步数s,这个人可以往上下左右四个方向走,问能不能恰好在s步走到终点
先求出最小步数min,然后就可以认为这个人在磨蹭时间,走回去再走回来,在min的基础上加上2的倍数都是能够恰好到达的。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int main() 7 { 8 int a,b,s; 9 scanf("%d %d %d",&a,&b,&s); 10 if(a<0) a=-a; 11 if(b<0) b=-b; 12 // printf("a=%d ",a); 13 14 // printf("b=%d ",b); 15 16 int k=s-a-b; 17 18 // printf("%d ",k); 19 if(a==0&&b==0) 20 { 21 if(s%2==0) 22 printf("Yes "); 23 else 24 printf("No "); 25 } 26 else 27 { 28 if(k%2==0&&k>=0) 29 printf("Yes "); 30 else 31 printf("No "); 32 } 33 }
B
题意:一个人的朋友中有n个男孩,m个女孩,他可以在第i天邀请(i从0开始算),在第i天,他可以邀请第i%n个男孩,第i%m个女孩,然后男孩中有b个开心,女孩子中有g个开心,然后邀请的两个人中只要有一个人开心,另外一个也会变开心。 问能不能使得所有的男孩女孩都开心。
模拟这个邀请的过程直到大家都开心,跳出循环。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int x[1005],y[1005]; 7 int n,m; 8 int main() 9 { 10 int i,j,b,g,u,flag=0,sum=0; 11 scanf("%d %d",&n,&m); 12 scanf("%d",&b); 13 for(i=1;i<=b;i++) 14 { 15 scanf("%d",&u); 16 x[u]=1; 17 } 18 scanf("%d",&g); 19 for(i=1;i<=g;i++) 20 { 21 scanf("%d",&u); 22 y[u]=1; 23 } 24 25 for(i=0;i<100000;i++) 26 { 27 sum=0; 28 if(x[i%n]||y[i%m]) 29 { 30 x[i%n]=1; 31 y[i%m]=1; 32 } 33 34 for( j=0;j<n;j++) 35 sum+=x[j]; 36 for(j=0;j<m;j++ ) 37 sum+=y[j]; 38 if(sum==(n+m)) 39 { 40 flag=1; 41 break; 42 } 43 44 } 45 if(flag) printf("Yes "); 46 else printf("No "); 47 }
C
题意:给出一个函数f(1234)=1!*2!*3!*4!=288=f(33222) 先将自变量拆成每一位的阶乘,通过类似上述的变换,怎样得到最大的新的自变量--
思路是问来哒(≧▽≦)/
观察到2!=2!;3!=3;4!=3!*2!*2!;
然后可以联想到如果一个数位数占得越多,那么它就越大, 所以就将单独的数尽量拆成更小的数的阶乘,这样构成新的自变量的位数就越多,再把各个位上的数按由大到小的顺序输出----
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int ss[100005]; 7 char str[20]; 8 int s[10][5]={{0},{0},{2},{3},{3,2,2},{5},{5,3},{7},{7,2,2,2},{7,3,3,2}}; 9 int cmp(int a,int b) 10 { 11 return a>b; 12 } 13 int main() 14 { 15 int n,i,j,k=0; 16 scanf("%d",&n); 17 scanf("%s",&str); 18 for(i=0;i<n;i++) 19 { 20 int a=str[i]-'0'; 21 for(j=0;s[a][j]!=0;j++) 22 { 23 ss[k]=s[a][j]; 24 k++; 25 } 26 } 27 sort(ss,ss+k,cmp); 28 for(i=0;i<k;i++) 29 printf("%d",ss[i]); 30 printf(" "); 31 }