codeforce #632 div2

A. Little Artem

# 题意

多组数据,给定行数n和列数m,对其中单元格进行染色,1为黑色或0为白色,要求相邻0的1的数量是相邻1的0的数量+1,输出染色方案

1 ≤ t ≤ 20

2 ≤ n,m ≤ 100

# 题解 

想最极端情况,第一行和第一列染成黑色,其余全白色即可,不需要分类讨论

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int t;
 5     cin>>t;
 6     while(t--){
 7         int n,m;
 8         cin>>n>>m;
 9         for(int i=1;i<=n;i++) {
10             for (int j = 1; j <= m; j++) {
11                 if (i == 1 || j == 1)
12                     cout << 'B';
13                 else
14                     cout << 'W';
15             }
16             puts("");
17         }
18     }
19 }

 B. Kind Anton

# 题意

多组数据,给定一个n,给定长度为n的数组a,b其中a只由{-1 , 0 , 1}构成,a中可以进行任意次的操作:

对于aj=ai+aj (i < j),若a能变化至b,输出YES否则NO

1 ≤ t ≤ 104

1 ≤ n ≤ 2 · 105

-109 ≤ bi ≤ 109

# 题解

对a分别用p1,p2累计到当前位置的-1、1个数,对b从后往前枚举,枚举到b的时候先把a[i]的值的累计-1,

如果a[i]<b[i],1的个数=0那么直接输出NO,如果a[i]>b[i],-1的个数=0也直接输出NO

第一项前没有任何项,所以第一个不相等直接输出NO

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=2e5+10;
 4 int a[N],b[N];
 5 int n;
 6 void work(){
 7     cin>>n;
 8     int p1=0,p2=0;
 9     for(int i=1;i<=n;i++){
10         cin>>a[i];
11         if(a[i]==-1) p1++;
12         if(a[i]==1) p2++;
13     }
14     for(int i=1;i<=n;i++)
15         cin>>b[i];
16     if(a[1]!=b[1]) {puts("NO");return;}
17     for(int i=n;i>1;i--){
18         if(a[i]==1) p2--;
19         if(a[i]==-1) p1--;
20         if(a[i]>b[i] && p1<=0){
21             puts("NO");
22             return;
23         }
24         if(a[i]<b[i] && p2<=0) {
25             puts("NO");
26             return;
27         }
28     }
29     puts("YES");
30 }
31 int main(){
32     int t;
33     cin>>t;
34     while(t--){
35         work();
36     }
37 }

C. Eugene and an array

# 题意

给定一个长度n的序列,一个序列是好的当他所有的子序列包括自身的子序列和不为0,

例如[2, -2, 2]中只有3个好的序列,即3个长度为1的子序列,长度为2的和都是0,

长度为3所包含的长度为2的子序列中有和为0的。

1 ≤ n ≤ 2 · 105

-109 ≤ ai ≤ 109

# 题解

猜你喜欢

转载自www.cnblogs.com/hhyx/p/12670885.html