codeforces Round #611

霸气de小男生 提交于 2019-12-29 05:30:06

这种凌晨场真的折寿

就过了四题,8wa结尾心态炸裂,求别被hack,再hack就要爬了

A2   B8   C38(1)   E1:58(7)

D题感觉可以写,但是没有时间看了。幸好E最后发现了自己的错误。

 

A题:看到题的时候感觉好温馨,算时间,感动到了

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<set>
 6 #include<map>
 7 #include<queue>
 8 #include<vector>
 9 #define mem(a,b) memset(a,b,sizeof(a))
10 using namespace std;
11 #define ll long long
12 #define inf 0x3f3f3f3f
13 #define mod 1000000007
14 const int maxn=1e5+10;
15 int main()
16 {
17     int t;
18     scanf("%d",&t);
19     while(t--){
20         int n,m;
21     cin>>n>>m;
22     int sum=60-m+(23-n)*60;
23     printf("%d\n",sum);
24     }
25     return 0;
26 }
View Code

 

B题:看到题的那一刻,又感动到了

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<set>
 6 #include<map>
 7 #include<queue>
 8 #include<vector>
 9 #define mem(a,b) memset(a,b,sizeof(a))
10 using namespace std;
11 #define ll long long
12 #define inf 0x3f3f3f3f
13 #define mod 1000000007
14 const int maxn=1e5+10;
15 int main()
16 {
17     int t;
18     scanf("%d",&t);
19     while(t--){
20         int n,m;
21         cin>>n>>m;
22         int zx=n/m,ge=m/2;
23         int sheng=n-zx*m;
24         if(sheng>=ge){
25             printf("%d\n",zx*m+ge);
26         }
27         else{
28             printf("%d\n",zx*m+sheng);
29         }
30     }
31     return 0;
32 }
View Code

 

C题:这题是hack最多的 QAQ求求求了别注意到我

题意:给n个数字,0或者1~n之间,把0替换成1~n中没出现过的,同时满足不等于它所在的位置下标

思路:暴力……?感觉自己要被hack的……但算了算复杂度没超

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<set>
 6 #include<map>
 7 #include<queue>
 8 #include<vector>
 9 #define mem(a,b) memset(a,b,sizeof(a))
10 using namespace std;
11 #define ll long long
12 #define inf 0x3f3f3f3f
13 #define mod 1000000007
14 const int maxn=2e5+10;
15 int a[maxn],pos[maxn]={0},p[maxn];
16 int main()
17 {
18     int n;
19     queue<int>q;
20     scanf("%d",&n);
21     int t=0;
22     for(int i=1;i<=n;i++){
23         scanf("%d",&a[i]);
24         if(!a[i]){
25             p[t++]=i;
26         }
27         else{
28             pos[a[i]]=1;
29         }
30     }
31     for(int i=1;i<=n;i++){
32         if(!pos[i]){q.push(i);}
33     }
34     for(int i=0;i<t-2;i++){
35         int wei=q.front();q.pop();
36         if(wei!=p[i]){
37             a[p[i]]=wei;
38         }
39         else{
40             q.push(wei);
41             wei=q.front();q.pop();
42             a[p[i]]=wei;
43         }
44     }
45     int wei=q.front();q.pop();int wei2=q.front();
46     if(p[t-1]!=wei && p[t-2]!=wei2){
47         a[p[t-1]]=wei;a[p[t-2]]=wei2;
48     }
49     else{
50         a[p[t-2]]=wei;a[p[t-1]]=wei2;
51     }
52     for(int i=1;i<=n;i++){
53         printf(i==n?"%d\n":"%d ",a[i]);
54     }
55     return 0;
56 }
View Code

 

E题:这是我wa最多,花时间找错误最多的

题意:给一个n,输入n个数(1~n),代表人所在的房子序号,人可以左右移动一格或者不动,但只能移动一次。问最小,最多的可以住不同的房子

思路:缩小,扩大,扩大考虑房子序号出现次数1次,2次,大于等于3次,优先考了右边,然后是不动,再是左边。缩小,遇到房子序号出现次数为0的跳过,遇到不是0的,考虑111,101,110,100四种情况即可。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<set>
 6 #include<map>
 7 #include<queue>
 8 #include<vector>
 9 #define mem(a,b) memset(a,b,sizeof(a))
10 using namespace std;
11 #define ll long long
12 #define inf 0x3f3f3f3f
13 #define mod 1000000007
14 const int maxn=2e5+10;
15 int a[maxn]={0},vis[maxn]={0},pos[maxn]={0},k;
16 int main()
17 {
18     int n;
19     int sum=0,ans=0;
20     scanf("%d",&n);
21     for(int i=0;i<n;i++){
22         scanf("%d",&k);
23         pos[k]++;
24         vis[k]++;
25     }
26     for(int i=1;i<=n;i++){
27         if(pos[i]==1){
28            if(!a[i-1]){a[i-1]=1;}
29            else if(!a[i]){a[i]=1;}
30            else if(!a[i+1]){a[i+1]=1;}
31         }
32         else if(pos[i]==2){
33             if(!a[i-1]){
34                 a[i-1]=1;
35                 if(!a[i]){a[i]=1;}
36                 else if(!a[i+1]){a[i+1]=1;}
37             }
38             else{
39                 a[i]=1;
40                 a[i+1]=1;
41             }
42         }
43         else if(pos[i]>=3){
44             a[i]=1;a[i-1]=1;a[i+1]=1;
45         }
46     }
47     for(int i=0;i<=n+1;i++){if(a[i]){sum++;}}
48     for(int i=1;i<=n;i++){
49         if(vis[i] && vis[i+2] && vis[i+1]){
50             ans++;i=i+2;
51         }
52         else if(vis[i] && vis[i+1] && !vis[i+2]){
53             ans++;i=i+2;
54         }
55         else if(vis[i] && !vis[i+1] && vis[i+2]){
56             ans++;i=i+2;
57         }
58         else if(vis[i] && !vis[i+1] && !vis[i+2]){
59             ans++;i=i+2;
60         }
61  
62    }
63    printf("%d %d\n",ans,sum);
64     return 0;
65 }
View Code

 

D和F等期末考完再补吧。希望期末全过啊

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!