Educational Codeforces Round 82 (Rated for Div. 2)

A.Erasing Zeroes

题解:暴力即可,统计区间1的0。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int t;
 5 char s[110];
 6 int main()
 7 {
 8     scanf("%d",&t);
 9     while(t--)
10     {
11         int ans = 0;
12         scanf(" %s",s);
13         int len = strlen(s);
14         bool flag = true;
15         for(int j = 0,i = 0; i < len; i++)
16         {
17             if(s[i] == '1' && s[i+1] == '0' && i+1 < len && flag) j = i,flag = false;
18             if(s[i] == '0' && s[i+1] == '1' && i+1 < len && !flag) ans += i-j,flag = true;
19         }
20         printf("%d\n",ans);
21     }
22     return 0;
23 }
View Code

B.National Project

题解:贪心思想,坏天气小于好天气,之间开工,好天气小于坏天气输出的时候要注意比较和路的长度。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int t;
 5 ll n,g,b,ans;
 6 int main()
 7 {
 8     std::ios::sync_with_stdio(false);
 9     cin.tie(0);
10     cin>>t;
11     while(t--)
12     {
13         ll t = 0;
14         ans = 0;
15         cin>>n>>g>>b;
16         t = (n+1)/2;
17         if(b <= g)
18         {
19             cout<<n<<'\n';
20         }
21         if(b > g)
22         {
23             ll tt = t%g;
24             if(tt) ans = (t/g)*(g+b)+tt;
25             else ans = (t/g)*(b+g) - b;
26             cout<<max(ans,n)<<'\n';
27         }
28     }
29     return 0;
30 }
View Code

C.Perfect Keyboard

题解:开空间存相邻的,扫一次暴力判断

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int dis[26][26];
 5 vector<int>v[30];
 6 int ans[30],idx=0;
 7 int q[30];
 8 int vis;
 9 void dfs(int x,int fa)   //dfs(i,-1)
10 {
11     q[x]=1;
12     ans[++idx]=x;
13     int L = v[x].size();
14     for(int i = 0; i < L; ++i)
15     {
16         if(v[x][i]==fa)
17             continue;
18         if(q[v[x][i]])
19         {
20             vis=-1;
21             continue;
22         }
23         dfs(v[x][i],x);
24     }
25 }
26 int main()
27 {
28     int t;
29     scanf("%d",&t);
30     while(t--)
31     {
32         idx=0;
33         string s;
34         cin>>s;
35         memset(dis,0,sizeof dis);
36         int len = s.size();
37         for(int i=0; i<len-1; i++)
38         {
39             int a=s[i]-'a',b=s[i+1]-'a';
40             dis[a][b]=dis[b][a]=1;
41         }
42         vis=0;
43         for(int i=0; i<26; i++)
44         {
45             int num=0;
46             v[i].clear();
47             q[i]=0;
48             for(int j=0; j<26; j++)
49             {
50                 if(i==j) continue;
51                 if(dis[i][j]==1) v[i].push_back(j),num++;
52             }
53             if(num>2) vis=-1;
54         }
55         if(vis==-1) puts("NO");
56         else
57         {
58             for(int i=0; i<26; i++)
59             {
60                 if(v[i].size()==0)
61                 {
62                     ans[++idx]=i;
63                     q[i]=1;
64                 }
65                 else if(v[i].size()==1&&q[i]==0) dfs(i,-1);
66             }
67             for(int i=0; i<26; i++)
68                 if(!q[i]) vis=-1;
69             if(vis==-1) puts("NO");
70             else
71             {
72                 printf("YES\n");
73                 for(int i=1; i<=26; i++) printf("%c",'a'+ans[i]);
74                 puts("");
75             }
76         }
77     }
78 }
View Code

 

 

posted @ 2020-02-13 22:32  留幸愉  阅读(203)  评论(0编辑  收藏  举报