这种凌晨场真的折寿
就过了四题,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 }
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 }
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 }
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 }
D和F等期末考完再补吧。希望期末全过啊
来源:https://www.cnblogs.com/luoyugongxi/p/12114042.html
