记一次周赛
A
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2089
去掉最高最低 算平均
View Code
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<stdlib.h> 5 #include<algorithm> 6 using namespace std; 7 double a[10]; 8 int main() 9 { 10 int i,j,k,n,m,x,y; 11 while(cin>>a[0]) 12 { 13 int f = 0; 14 double s= a[0]; 15 for(i = 1; i < 6 ; i++) 16 { 17 cin>>a[i]; 18 s+=a[i]; 19 } 20 for(i = 0; i < 6 ; i++) 21 if(a[i]!=0) 22 f =1; 23 if(!f) 24 break; 25 double mi = a[0],ma = a[1]; 26 x = 0;y = 1; 27 for(i = 0 ; i < 6 ; i++) 28 { 29 if(a[i]>ma) 30 { 31 x = i; 32 ma = a[i]; 33 } 34 if(a[i]<mi) 35 { 36 y = i; 37 mi = a[i]; 38 } 39 } 40 s= s-(mi+ma);; 41 cout<<s/4<<endl; 42 } 43 return 0; 44 }
B
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2090
不能用gets输入 错了好几次
View Code
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<stdlib.h> 5 using namespace std; 6 char str[1000010],ss[1000010]; 7 int main() 8 { 9 int i,j,k,m,kk=0,g; 10 char c; 11 while(cin>>str) 12 { 13 if(strcmp(str,"0")==0) 14 break; 15 kk++; 16 k = strlen(str); 17 g=0; 18 int gg=0; 19 while(str[gg]=='0') 20 { 21 gg++; 22 } 23 ss[g++] = str[k-1]; 24 c = str[k-1]; 25 int tk = 0; 26 for(i = k-2 ; i >=gg ; i--) 27 { 28 if(str[i]-(c+tk)>=0) 29 { 30 ss[g++] = str[i]-(c+tk)+'0'; 31 tk = 0; 32 c = ss[g-1]; 33 } 34 else 35 { 36 ss[g++] = (str[i]+10)-(c+tk)+'0'; 37 tk = 1; 38 c = ss[g-1]; 39 } 40 } 41 printf("%d. ",kk); 42 if(ss[g-1]=='0') 43 { 44 cout<<"IMPOSSIBLE\n"; 45 continue; 46 } 47 int f = 0; 48 for(i = g-1; i >= 0 ; i--) 49 { 50 if(str[i]<'0'||str[i]>'9') 51 { 52 f = 1; 53 break; 54 } 55 } 56 if(f) 57 { 58 cout<<"IMPOSSIBLE\n"; 59 continue; 60 } 61 for(i = g-1 ; i >=0 ; i--) 62 cout<<ss[i]; 63 puts(""); 64 } 65 return 0; 66 }
C
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2091
当时没看这题 后来听学长说了怎么做 才A了的 从外到内 每次都找一圈中的最小的放在左上角 判断是否成立
View Code
1 #include <iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<stdlib.h> 5 using namespace std; 6 int ro[1010][1010],go[1010][1010],yy[5000]; 7 int main() 8 { 9 int i,j,k,n,m,x,y,oo=0,g; 10 while(cin>>n) 11 { 12 if(n==0) 13 break; 14 oo++; 15 int flag = 1; 16 for(i = 1; i <= n ;i++) 17 for(j = 1 ; j <= n ; j++) 18 { 19 scanf("%d",&ro[i][j]); 20 } 21 k = 0; 22 j = 1; 23 g =1; 24 int kk; 25 while(1) 26 { 27 kk = n*k+j; 28 g=1; 29 for(i = j ; i <= n-j+1 ; i++) 30 yy[g++] = ro[k+1][i]; 31 for(i = k+2 ; i <= n-k ; i++) 32 yy[g++]=ro[i][n-j+1]; 33 for(i = n-j ; i >= j ; i--) 34 yy[g++]=ro[n-k][i]; 35 for(i = n-k-1 ; i > k+1 ; i--) 36 yy[g++] = ro[i][j]; 37 for(i = 1 ; i < g ; i++) 38 if(yy[i]==kk) 39 { 40 x = i; 41 break; 42 } 43 if(i==g) 44 flag=0; 45 if(!flag) 46 break; 47 int o = x-1; 48 49 for(i = j ; i <= n-j+1 ; i++) 50 { 51 o++;if(o==g) o=1; 52 ro[k+1][i] = yy[o]; 53 } 54 for(i = k+2 ; i <= n-k ; i++) 55 { 56 o++;if(o==g) o=1; 57 ro[i][n-j+1] = yy[o]; 58 } 59 for(i = n-j ; i >= j ; i--) 60 { 61 o++;if(o==g) o=1; 62 ro[n-k][i] = yy[o]; 63 } 64 for(i = n-k-1 ; i > k+1 ; i--) 65 { 66 o++; 67 if(o==g) o=1; 68 ro[i][j] = yy[o]; 69 } 70 if((k+1)==n/2) 71 { 72 break; 73 } 74 j++; 75 k++; 76 } 77 printf("%d. ",oo); 78 if(!flag) 79 { 80 cout<<"NO\n"; 81 continue; 82 } 83 84 for(i = 1 ; i <= n ; i++) 85 { 86 for(j = 1; j <= n ; j++) 87 if(ro[i][j]!=((i-1)*n+j)) 88 { 89 flag = 0; 90 break; 91 } 92 if(!flag) 93 break; 94 } 95 if(!flag) 96 { 97 cout<<"NO\n"; 98 } 99 else 100 cout<<"YES\n"; 101 } 102 return 0; 103 } 104 105
D
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2092
第一时间做的这题,打完发现样例不对 就一直没敢交 后来说样例错了 而且EOF出现一次就break
View Code
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<stdlib.h> 5 using namespace std; 6 char str[100010]; 7 int main() 8 { 9 int i,j,k; 10 while(gets(str)!=NULL) 11 { 12 if(strcmp(str,"EOF")==0) 13 break; 14 k = strlen(str); 15 int g=0,xx=0; 16 for(i = 0 ; i < k ; i++) 17 { 18 if(i+2<k&&str[i]=='E'&&str[i+1]=='O'&&str[i+2]=='F') 19 { 20 return 0; 21 } 22 if(str[i]!=' '&&(str[i]<'a'||str[i]>'z')) 23 continue; 24 if(str[i]==' ') 25 { 26 cout<<str[i]; 27 } 28 else 29 { 30 if(i+1<k) 31 { 32 if(str[i]=='d'&&str[i+1]=='d') 33 { 34 cout<<'p'; 35 i++; 36 } 37 else 38 if(str[i]=='e'&&str[i+1]=='i') 39 { 40 if(i!=0&&str[i-1]=='c') 41 cout<<"ei"; 42 else 43 cout<<"ie"; 44 i++; 45 } 46 else 47 if(i+3<k) 48 { 49 if(str[i]=='p'&&str[i+1]=='i'&&str[i+2]=='n'&&str[i+3]=='k') 50 { 51 cout<<"floyd"; 52 i+=3; 53 } 54 else 55 cout<<str[i]; 56 } 57 else 58 cout<<str[i]; 59 } 60 else 61 cout<<str[i]; 62 } 63 } 64 puts(""); 65 } 66 return 0; 67 } 68
E
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2093
比赛时没看这道题 看好多人都挂在这了 就没敢看 注意一下会有负数 打个表
View Code
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<stdlib.h> 5 using namespace std; 6 #define N 1000010 7 int pg[N],pr[N],pd[N],g,p[N]; 8 void init() 9 { 10 int i,j; 11 for(i = 2 ; i <= 1000; i++) 12 { 13 if(!pr[i]) 14 { 15 for(j = i+i ; j <= 1000000 ; j+=i) 16 if(!pr[j]) 17 pr[j] = 1; 18 } 19 } 20 for(i = 1; i <= 1000 ; i++) 21 for(j = 1; j <= 1000 ; j++) 22 { 23 int k = i*i+j*j; 24 if(k<=1000000) 25 pg[k] = 1; 26 } 27 p[2] = 1; 28 pd[2] = 1; 29 for(i = 2 ; i <= 1000000 ; i++) 30 { 31 if(!pr[i]) 32 pd[i]= pd[i-1]+1; 33 else 34 pd[i] = pd[i-1]; 35 if(!pr[i]&&pg[i]) 36 p[i] = p[i-1]+1; 37 else 38 p[i] = p[i-1]; 39 } 40 } 41 int main() 42 { 43 int i,j,k,n,m; 44 init(); 45 while(cin>>n>>m) 46 { 47 if(n==-1&&m==-1) 48 break; 49 int sum = 0; 50 if(m<2) 51 { 52 cout<<n<<" "<<m<<" 0 0\n"; 53 continue; 54 } 55 cout<<n<<" "<<m<<" "; 56 if(n<2) 57 n = 2; 58 cout<<pd[m]-pd[n-1]<<" "<<p[m]-p[n-1]<<endl; 59 } 60 return 0; 61 } 62