Codeforces Round #688 (Div. 2)

 

A. Cancel the Trains

题意:给定两个数组,找出这两个数组中有多少重复元素,然后输出

思路:直接找

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<map>
 7 #include<queue>
 8 using namespace std;
 9 const int maxx=2e5+10;//14.12
10 int main(){
11     int n;
12     scanf("%d",&n);
13     while(n--){
14         int a[150]={0};
15         int b[150]={0};
16         int m,k;
17         scanf("%d %d",&m,&k);
18         for(int i=0;i<m;i++){
19             int num;
20             scanf("%d",&num);
21         a[num]++;
22         }
23         for(int j=0;j<k;j++){
24                 int num;
25             scanf("%d",&num);
26             b[num]++;
27         }
28         int sum=0;
29         for(int i=0;i<150;i++){
30             if(a[i]>0&&b[i]>0){
31                 sum++;
32             }
33         }
34         printf("%d\n",sum);
35     }
36 }
View Code

 

B. Suffix Operations

题目及解题见:一道codeforces题引发的差分学习

 

C. Triangles(思维题)

题意:题目中已知矩阵及其矩阵上的数字(从0-9),问最大面积的三角形:1.0-9各个数字分别构成的最大的三角形,保证顶点上是其对应的数字;2.可以替换掉矩阵中任意一个数字,把它变成任意一个数字;3.保证三角形的一个边和是水平的或者竖直的,输出各个数构成三角形的最大面积值

思路:构造,让其一个点是定住的,找到此数能到达的最大位置x和最小的位置x(纵坐标不一定相等)然后竖直方向直接改变进行变换,让其成为被改变的那个数,这样就和竖直方向平行了。水平方向的计算也是如此

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<map>
 7 using namespace std;
 8 //const int maxxx=1e5+10;
 9 int maxx[20]={0},maxy[20]={0},minx[20],miny[20],c[50]={0};
10 int ans[50]={0},p[2500][2500];
11 int main(){
12     int t;
13     scanf("%d",&t);
14     while(t--){
15         int n;
16         scanf("%d",&n);
17 
18         for(int i=0;i<10;i++){
19             minx[i]=n+1;
20             miny[i]=n+1;
21             maxx[i]=0;
22             maxy[i]=0;
23             c[i]=0;
24             ans[i]=0;
25         }
26         for(int i=1;i<=n;i++){
27             for(int j=1;j<=n;j++){
28                 scanf("%1d",&p[i][j]);
29                 int xx=p[i][j];
30                 c[xx]++;
31                 maxx[xx]=max(maxx[xx],i);
32                 maxy[xx]=max(maxy[xx],j);
33                 minx[xx]=min(minx[xx],i);
34                 miny[xx]=min(miny[xx],j);
35             }
36         }
37         for(int i=1;i<=n;i++){
38             for(int j=1;j<=n;j++){
39                 int xx;
40                 xx=p[i][j];
41                 if(c[xx]<2){
42                     continue;
43                 }
44                 int dx=max(i-minx[xx],maxx[xx]-i);
45                 int dy=max(j-miny[xx],maxy[xx]-j);
46                 ans[xx]=max(ans[xx],dx*(max(j-1,n-j)));
47                 ans[xx]=max(ans[xx],dy*(max(i-1,n-i)));
48             }
49         }
50         for(int i=0;i<10;i++){
51             printf("%d",ans[i]);
52             if(i<9){
53                 printf(" ");
54             }
55         }
56 
57         printf("\n");
58     }
59 }
View Code

 

posted @ 2020-12-06 21:13  bonel  阅读(80)  评论(0)    收藏  举报