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 }
View Code

 

  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 }
View Code

 

posted @ 2021-10-31 10:04  Sylvia_lee  阅读(41)  评论(0编辑  收藏  举报