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