CSP2015-12
CSP201512-1 数位之和
1 // 2 // main.cpp 3 // CSP201512-1 数位之和 4 // 5 // Created by sylvia on 2021/10/31. 6 // Copyright © 2021 apple. All rights reserved. 7 // 8 9 #include <iostream> 10 #include <stdio.h> 11 #include <string.h> 12 using namespace std; 13 char c; 14 int ans; 15 int main(){ 16 while((c=getchar())!='\n'){ 17 int a=c-'0'; 18 ans+=a; 19 } 20 cout<<ans<<endl; 21 }
CSP201512-2 消除类游戏
数据范围非常小,O(n^2)暴力,使用打标记。
我本来想vis访问过的不再进行访问,但是只能拿30‘
比如下面这个样例
4
1 2 3 4 5
2 4 3 3 3
3 4 3 4 5
2 4 3 2 4
它会在对[1,3]的3处理的时候对[2,3]的3进行vis标记,如果在访问[2,3]的3时因为vis标记而放弃对其处理,它右侧的两个三就不会被标记,最终右边两个三不会被消除,就会出现下面的输出,所以必须对每个n*m个元素全部枚举处理一次
1 2 0 4 5
2 0 0 3 3
3 0 0 4 5
2 0 0 2 4
1 // 2 // main.cpp 3 // CSP201512-2 消除类游戏 4 // 5 // Created by sylvia on 2021/11/6. 6 // Copyright © 2021 apple. All rights reserved. 7 // 8 #include <iostream> 9 #include <stdio.h> 10 #include <math.h> 11 #include <algorithm> 12 #include <string.h> 13 using namespace std; 14 15 int a[33][33]; 16 int vis[33][33]; 17 int main(){ 18 int n,m,x,y; 19 cin>>n>>m; 20 memset(vis,0,sizeof(vis)); 21 for (int i=0;i<n;i++){ 22 for (int j=0;j<m;j++){ 23 cin>>a[i][j]; 24 } 25 } 26 for (int i=0;i<n;i++){ 27 for (int j=0;j<m;j++){ 28 x=i; 29 y=j; 30 if(x<n-2&&a[x+1][y]==a[x+2][y]&&a[x+1][y]==a[x][y]){ //down 31 vis[x][y]=1; 32 while (a[x+1][y]==a[x][y]){ 33 x++; 34 vis[x][y]=1; 35 } 36 } 37 x=i; 38 y=j; 39 if(y<m-2&&a[x][y+1]==a[x][y+2]&&a[x][y]==a[x][y+1]){ //right 40 vis[x][y]=1; 41 while (a[x][y+1]==a[x][y]){ 42 y++; 43 vis[x][y]=1; 44 } 45 } 46 47 } 48 } 49 for (int i=0;i<n;i++){ 50 for (int j=0;j<m;j++){ 51 if(!vis[i][j]) cout<<a[i][j]<<' '; 52 else cout<<0<<' '; 53 } 54 cout<<endl; 55 } 56 return 0; 57 58 }