表示水出A和B,C没看懂,E看懂了以前貌似还见过不会做,CE应该都是DP。。。唉,DP,啊。。。。A题3分钟,B题卡了错了4次,很多2B错误。。把trick都想清楚了,这个基本属于乱搞题了。。。43分钟做出5Y了第二个,还用这个题,查了3个,挂了4个。。。赚了,然后就是围观,别的题。。。话说,rating大张啊,变蓝了。。。
A题 水。。。
#include <stdio.h>
#include <string.h>
int main()
{
int i,j,n,m,z = 0;
scanf("%d%d",&n,&m);
for(i = 0;i <= 100;i ++)
for(j = 0;j <= 100;j ++)
{
if(i*i+j == n&&i+j*j == m)
z ++;
}
printf("%d\n",z);
return 0;
}
B题:题意给你一些数,找出一个最大的被 2 3 5 都整除。
乱搞方法:分析一下,可以知道一定被30整除,所以最后一个数必须是0.搞一下判断。从大到小排序,如果整除3,输出,如果不整除,就有两种情况,1和2,从低位开始先找到是否有一个数,对3取余和 sum%3相等,如果没找到,再找是否两个数取余 !=0且!=sum%3,存在 就删了两个。最后注意一下前导0(这就是查3次成功数据)。。。
唉,错了4次,啥也不说了。。。
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 int cmp(const void *a,const void *b) 5 { 6 return *(int *)b-*(int *)a; 7 } 8 int p[100001],o[100001]; 9 int main() 10 { 11 int i,j,n,m,z = 0,sum = 0,y = 1; 12 scanf("%d",&n); 13 for(i = 0; i <= n-1; i ++) 14 { 15 scanf("%d",&p[i]); 16 if(p[i] == 0) 17 z = 1; 18 sum += p[i]; 19 } 20 qsort(p,n,sizeof(p[0]),cmp); 21 if(!z) 22 printf("-1\n"); 23 else 24 { 25 if(sum % 3 != 0) 26 { 27 for(i = n-1; i >= 0; i --) 28 { 29 if(p[i] % 3 == sum % 3) 30 { 31 o[i] = 1; 32 break; 33 } 34 } 35 j = 0; 36 if(i == -1) 37 { 38 for(i = n-1; i >= 0; i --) 39 { 40 if(p[i]%3 != 0&&p[i] % 3 != sum % 3) 41 { 42 o[i] = 1; 43 j ++; 44 } 45 if(j == 2) 46 break; 47 } 48 if(j < 2) 49 { 50 printf("-1\n"); 51 y = 0; 52 } 53 } 54 } 55 if(y) 56 { 57 z = 0; 58 for(i = 0; i <= n-1; i ++) 59 { 60 if(!o[i]) 61 { 62 if(p[i] != 0) 63 z = 1; 64 if(z) 65 printf("%d",p[i]); 66 } 67 } 68 if(!z) 69 printf("0"); 70 printf("\n"); 71 } 72 } 73 return 0; 74 }