Educational Codeforces Round 105 (Rated for Div. 2)

A. ABC String

题目:就是用‘(’和‘)’来代替A,B,C并与之对应,问是不是存在这样的对应关系使得'('和‘)'正好匹配

思路:第一个和最后一个字母是确定的左括号或者是右括号,这样就还剩下一个字母没有进行讨论,然后假设一下,分成两种情况进行计算,只要有一种情况满足就好

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 using namespace std;
 7 int main(){
 8     int t;
 9     scanf("%d",&t);
10     while(t--){
11     char s[100];
12     getchar();
13     scanf("%s",&s);
14     int a=0,b=0,c=0;
15     int z=0,y=0;
16     int flag1=0,flag2=0;
17     for(int i=0;i<strlen(s);i++){
18         if(s[i]==s[0]){
19             z++;
20         }else if(s[i]==s[strlen(s)-1]){
21             y++;
22         }else{
23             z++;
24         }
25         if(y>z){
26             flag1=1;
27         }
28     }
29     if(z!=y){
30         flag1=1;
31     }
32     z=0;
33     y=0;
34     for(int i=0;i<strlen(s);i++){
35         if(s[i]==s[0]){
36             z++;
37         }else if(s[i]==s[strlen(s)-1]){
38             y++;
39         }else{
40             y++;
41         }
42         if(y>z){
43             flag2=1;
44         }
45     }
46     if(z!=y){
47         flag2=1;
48     }
49     z=0;
50     y=0;
51     if(flag1==1&&flag2==1){
52         printf("NO\n");
53     }else{
54         printf("YES\n");
55     }
56  
57  
58     }
59 }
View Code

B. Berland Crossword

题目:给定一个n×n的方格,起初都是空白的,给定第一行最后一行第一列最后一列会有多少个空格需要涂黑,问是不是有满足条件的涂色方法满足要求

思路:影响排布的只有四个角上的代码,那么就直接进行模拟从0-1四个角,只要有一个满足条件就可以,

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 using namespace std;
 7 int n,u,r,l,d;
 8 int check(int i,int j,int k,int z){
 9     if(i+j+n-2<u||u<i+j) return 0;
10     if(j+k+n-2<r||r<j+k) return 0;
11     if(z+k+n-2<d||d<z+k) return 0;
12     if(i+z+n-2<l||l<i+z) return 0;
13     return 1;
14 }//问题出在了全局变量和局部变量的问题上
15 int main(){
16     int t;
17     scanf("%d",&t);
18     while(t--){
19        // int n,u,r,l,d;
20         int uu=0,rr=0,ll=0,dd=0;
21         int flag=0;
22         scanf("%d %d %d %d %d",&n,&u,&r,&d,&l);
23         for(int i=0;i<=1;i++){
24             for(int j=0;j<=1;j++){
25                 for(int k=0;k<=1;k++){
26                     for(int z=0;z<=1;z++){
27                         if(check(i,j,k,z)==1) flag=1;
28                     }
29                 }
30             }
31         }
32         if(flag==1){
33             printf("YES\n");
34         }else{
35             printf("NO\n");
36         }
37     }
38 }
View Code

 

这套题告诉我最多的就是,有些变化少的东西,规律找不到就可以从头考虑是不是该进行模拟,然后一个一个的进行判断,毕竟很多东西不是总存在规律,而且有的题目范围也不是很大

posted @ 2021-03-06 10:06  bonel  阅读(85)  评论(0)    收藏  举报