这场比赛让我上橙了。

前三题都是大水题,不说了。

第四题有点难想,即使想到了也不能保证是对的。(所以说下面D的做法可能是错的)

E的难度是 $2300$,但是感觉很简单啊???说好的歪果仁擅长构造的呢???

这次超常发挥过头了,下次肯定要掉了QwQ。


A

水题。不过分类讨论有点难受,结果8min才交,被别人甩了一大截。

时间复杂度 $O(1)$。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> PII;
  5. const int maxn=;
  6. #define MP make_pair
  7. #define PB push_back
  8. #define lson o<<1,l,mid
  9. #define rson o<<1|1,mid+1,r
  10. #define FOR(i,a,b) for(int i=(a);i<=(b);i++)
  11. #define ROF(i,a,b) for(int i=(a);i>=(b);i--)
  12. #define MEM(x,v) memset(x,v,sizeof(x))
  13. inline ll read(){
  14. char ch=getchar();ll x=,f=;
  15. while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
  16. while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
  17. return f?-x:x;
  18. }
  19. int a,b,c;
  20. int main(){
  21. a=read();b=read();c=read();
  22. ll ans=*c;
  23. if(a>b) ans+=*b+;
  24. else if(a<b) ans+=*a+;
  25. else ans+=*a;
  26. cout<<ans;
  27. }

B

水题。枚举在前一种航线中删几个,明显是要删最小的几个。然后二分出此时在第二种航线中最早能乘坐哪个,再在这个基础上删几个。

注意特判第一种航线能被删完的情况。

时间复杂度 $O(n\log n)$。(实际上可以做到 $O(n)$,但是会稍难打,作为B题就不必要了)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> PII;
  5. const int maxn=;
  6. #define MP make_pair
  7. #define PB push_back
  8. #define lson o<<1,l,mid
  9. #define rson o<<1|1,mid+1,r
  10. #define FOR(i,a,b) for(int i=(a);i<=(b);i++)
  11. #define ROF(i,a,b) for(int i=(a);i>=(b);i--)
  12. #define MEM(x,v) memset(x,v,sizeof(x))
  13. inline ll read(){
  14. char ch=getchar();ll x=,f=;
  15. while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
  16. while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
  17. return f?-x:x;
  18. }
  19. int n,m,ta,tb,k,a[maxn],b[maxn],ans;
  20. int main(){
  21. n=read();m=read();ta=read();tb=read();k=read();
  22. if(k>=min(n,m)) return puts("-1"),;
  23. FOR(i,,n) a[i]=read()+ta;
  24. FOR(i,,m) b[i]=read();
  25. sort(a+,a+n+);sort(b+,b+m+);
  26. FOR(i,,k+){
  27. int p=lower_bound(b+,b+m+,a[i])-b;
  28. if(p+k-i+>m) return puts("-1"),;
  29. ans=max(ans,b[p+k-i+]+tb);
  30. }
  31. printf("%d\n",ans);
  32. }

C

水题。简单构造题。(以下的做法是能卡到 $5n$ 而且又臭又长的蒟蒻做法,应该会有更简洁或更优秀的做法)

每次考虑如何把数 $i$ 通过不超过 $5$ 次交换移到位置 $i$。

  1. 如果已经在,不用管。$0$ 次。
  2. 如果能直接交换(距离 $\ge\frac{n}{2}$),直接交换。$1$ 次。
  3. 如果 $i\le\frac{n}{2}$ 且 $at_i\le\frac{n}{2}$,用 $p_n$ 作为中介变量。$3$ 次。
  4. 如果 $i>\frac{n}{2}$ 且 $at_i>\frac{n}{2}$,用 $p_1$ 作为中介变量。$3$ 次。
  5. 如果都不满足,那么一个 $\le\frac{n}{2}$,一个 $>\frac{n}{2}$。把左边的与 $p_n$ 交换,右边的与 $p_1$ 交换。然后就能把 $p_1,p_n$ 交换。最后把左边的与 $p_n$ 交换,右边的与 $p_1$ 交换。$5$ 次。

(如果不能理解,建议手动模拟一下)

时间复杂度 $O(n)$。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> PII;
  5. const int maxn=;
  6. #define MP make_pair
  7. #define PB push_back
  8. #define lson o<<1,l,mid
  9. #define rson o<<1|1,mid+1,r
  10. #define FOR(i,a,b) for(int i=(a);i<=(b);i++)
  11. #define ROF(i,a,b) for(int i=(a);i>=(b);i--)
  12. #define MEM(x,v) memset(x,v,sizeof(x))
  13. inline ll read(){
  14. char ch=getchar();ll x=,f=;
  15. while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
  16. while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
  17. return f?-x:x;
  18. }
  19. int n,p[maxn],id[maxn],m,a[maxn*],b[maxn*];
  20. int tp(int x){return x<=n/?:;}
  21. int main(){
  22. n=read();
  23. FOR(i,,n) id[p[i]=read()]=i;
  24. FOR(i,,n){
  25. if(p[i]==i) continue;
  26. int x=i,y=id[i],t1=tp(x),t2=tp(y);
  27. if(abs(x-y)*>=n){
  28. m++;
  29. a[m]=x;b[m]=y;
  30. }
  31. else if(t1==t2){
  32. int ot=t1?:n;
  33. m++;
  34. a[m]=x;b[m]=ot;
  35. m++;
  36. a[m]=y;b[m]=ot;
  37. m++;
  38. a[m]=x;b[m]=ot;
  39. }
  40. else{
  41. if(t1>t2) swap(x,y),swap(t1,t2);
  42. m++;
  43. a[m]=x;b[m]=n;
  44. m++;
  45. a[m]=;b[m]=y;
  46. m++;
  47. a[m]=;b[m]=n;
  48. m++;
  49. a[m]=;b[m]=y;
  50. m++;
  51. a[m]=x;b[m]=n;
  52. }
  53. swap(p[x],p[y]);
  54. id[p[x]]=x;
  55. id[p[y]]=y;
  56. }
  57. printf("%d\n",m);
  58. FOR(i,,m) printf("%d %d\n",a[i],b[i]);
  59. }

D

分两类讨论,第一种是 $a_1>b_1<a_2>b_2\cdots$,第二种是$%#!*&^@!。

这里以第一种为例。

这里就不会了。然后就按 $b$ 从小到大排序,贪心地选。过了???

等官方题解出来我再把这个坑(锅?)补一补吧。

upd:以第一种 $a_i>b_i$ 为例。如果按 $a$ 从小到大排序,那么 $a_{i_2}>a_{i_1}>b_{i_1}$,这是一定合法的。然而按 $b$ 排序就不知道为什么了。

upd2:还是以 $a_i>b_i$ 为例。如果按 $b$ 从小到大排序,那么 $b_{i_1}<b_{i_2}<a_{i_2}$。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> PII;
  5. const int maxn=;
  6. #define MP make_pair
  7. #define PB push_back
  8. #define lson o<<1,l,mid
  9. #define rson o<<1|1,mid+1,r
  10. #define FOR(i,a,b) for(int i=(a);i<=(b);i++)
  11. #define ROF(i,a,b) for(int i=(a);i>=(b);i--)
  12. #define MEM(x,v) memset(x,v,sizeof(x))
  13. inline ll read(){
  14. char ch=getchar();ll x=,f=;
  15. while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
  16. while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
  17. return f?-x:x;
  18. }
  19. struct item{
  20. int a,b,id;
  21. bool operator<(const item &i)const{return b<i.b;}
  22. }t1[maxn],t2[maxn];
  23. int n,m1,m2,a[maxn],b[maxn],al1,ans1[maxn],al2,ans2[maxn];
  24. int main(){
  25. n=read();
  26. FOR(i,,n) a[i]=read(),b[i]=read();
  27. FOR(i,,n) if(a[i]>b[i]) t1[++m1]=(item){a[i],b[i],i};
  28. sort(t1+,t1+m1+);
  29. FOR(i,,m1) if(t1[i].a>t1[ans1[al1]].b) ans1[++al1]=i;
  30. FOR(i,,n) if(a[i]<b[i]) t2[++m2]=(item){a[i],b[i],i};
  31. sort(t2+,t2+m2+);
  32. t2[].b=1e9;
  33. ROF(i,m2,) if(t2[i].a<t2[ans2[al2]].b) ans2[++al2]=i;
  34. if(al1>al2){
  35. printf("%d\n",al1);
  36. FOR(i,,al1) printf("%d ",t1[ans1[i]].id);
  37. }
  38. else{
  39. printf("%d\n",al2);
  40. FOR(i,,al2) printf("%d ",t2[ans2[i]].id);
  41. }
  42. }

E

很简单的构造题,为什么连那么多歪果仁都不会……

首先发现 $0\le 2d\le s_j-s_i$ 等价于 $i$ 和 $j$ 的大小关系不变。以下我们只要在大小不变的条件下构造。

upd:经CDW提醒,这不能直接互推(想象一下 $i$ 与一个更大的 $k$ 移动然后超过了 $j$ 到达 $i'$)。但是如果有解,肯定有一种方案使得最后的大小关系和原来的大小关系一样。如刚刚那个反例,可以先 $j$ 和 $k$ 操作,$j$ 移到 $i'$,然后 $i$ 和 $k$ 操作,$i$ 移到 $j$。

那么就可以把 $s$ 和 $t$ 从小到大排序。

求出每个元素的变化值。($d_i=s_i-t_i$)如果变化值之和不为 $0$ 则无解。

从小到大枚举变化值。每枚举一个变化值我们就想法把它变为 $0$。

首先,如果 $d_i$ 是负数,由于之前的 $d$ 都是 $0$,所以这个变化值不可能再变大。无解。

否则就找到这后面的第一个负数。可以对这两个数进行操作。

重复以上操作直到 $d_i=0$ 为止。

发现第一个负数的位置不降。可以就用一个指针不停往后推。

时间复杂度 $O(n\log n)$。由于每枚举一个数或者指针往后推都至多用 $1$ 次操作,所以 $m\le 2n$。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> PII;
  5. const int maxn=;
  6. #define MP make_pair
  7. #define PB push_back
  8. #define lson o<<1,l,mid
  9. #define rson o<<1|1,mid+1,r
  10. #define FOR(i,a,b) for(int i=(a);i<=(b);i++)
  11. #define ROF(i,a,b) for(int i=(a);i>=(b);i--)
  12. #define MEM(x,v) memset(x,v,sizeof(x))
  13. inline ll read(){
  14. char ch=getchar();ll x=,f=;
  15. while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
  16. while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
  17. return f?-x:x;
  18. }
  19. struct item{
  20. int s,id;
  21. bool operator<(const item &i)const{return s<i.s;}
  22. }it[maxn];
  23. int n,s[maxn],t[maxn],d[maxn],cur=,m,a[maxn],b[maxn],c[maxn];
  24. ll sum;
  25. int main(){
  26. n=read();
  27. FOR(i,,n) s[i]=read(),it[i]=(item){s[i],i};
  28. FOR(i,,n) t[i]=read();
  29. sort(it+,it+n+);sort(t+,t+n+);
  30. FOR(i,,n) d[i]=t[i]-it[i].s,sum+=d[i];
  31. if(sum) return puts("NO"),;
  32. FOR(i,,n){
  33. if(d[i]<) return puts("NO"),;
  34. while(d[i]){
  35. while(cur<=n && d[cur]>=) cur++;
  36. int x=min(d[i],-d[cur]);
  37. d[i]-=x;d[cur]+=x;
  38. a[++m]=it[i].id;b[m]=it[cur].id;c[m]=x;
  39. }
  40. }
  41. printf("YES\n%d\n",m);
  42. FOR(i,,m) printf("%d %d %d\n",a[i],b[i],c[i]);
  43. }

F,G,H

一个 $2500$,一个$3100$,一个 $3600$(史上第一道 $3600$ 题),完全不可做。以后再来填吧。

Codeforces Global Round 3 题解的更多相关文章

  1. Codeforces Global Round 2 题解

    Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...

  2. Codeforces Global Round 4 题解

    技不如人,肝败吓疯…… 开场差点被 A 题意杀了,幸好仔细再仔细看,终于在第 7 分钟过掉了. 跟榜.wtf 怎么一群人跳题/倒序开题? 立刻紧张,把 BC 迅速切掉,翻到了 100+. 开 D.感觉 ...

  3. Codeforces Global Round 16题解

    E. Buds Re-hanging 对于这个题该开始还是没想法的,但这显然是个思维题,还是要多多动手推样例,实践一下. 简化题意:给定一个有根树,规定某个点为树干,当且仅当这个点不是根,且这个点至少 ...

  4. Codeforces Global Round 1 (A-E题解)

    Codeforces Global Round 1 题目链接:https://codeforces.com/contest/1110 A. Parity 题意: 给出{ak},b,k,判断a1*b^( ...

  5. Codeforces Global Round 11 个人题解(B题)

    Codeforces Global Round 11 1427A. Avoiding Zero 题目链接:click here 待补 1427B. Chess Cheater 题目链接:click h ...

  6. CodeForces Global Round 1

    CodeForces Global Round 1 CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快.... 所以就写下题解吧. A. Parity 太简单了,随便模拟一下就完了. B ...

  7. Codeforces Global Round 1 - D. Jongmah(动态规划)

    Problem   Codeforces Global Round 1 - D. Jongmah Time Limit: 3000 mSec Problem Description Input Out ...

  8. Codeforces Global Round1 简要题解

    Codeforces Global Round 1 A 模拟即可 # include <bits/stdc++.h> using namespace std; typedef long l ...

  9. Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)

    Codeforces Global Round 1 (CF1110) 继续补题.因为看见同学打了这场,而且涨分还不错,所以觉得这套题目可能会比较有意思. 因为下午要开学了,所以恐怕暂时不能把这套题目补 ...

随机推荐

  1. Hash冲突的解决--暴雪的Hash算法

    Hash冲突的解决--暴雪的Hash算法https://usench.iteye.com/blog/2199399https://www.bbsmax.com/A/kPzOO7a8zx/

  2. Ubuntu 16 PPA源管理(查询、添加、修改、删除)

    查询 在Ubuntu中,每个PPA源是单独存放在/etc/apt/sources.list.d/文件夹中的,进入到该文件夹,使用ls命令查询即可列出当前系统添加的PPA源. 添加 sudo add-a ...

  3. 【杂文】NOIP2018 蒟蒻自闭记

    [杂文]NOIP2018 蒟蒻自闭记 都 \(9102\) 年了,谁还记得 \(2018\) 年的事啊 \(QAQ\) . 还有两个月就要去参加首届 \(CSP\) 了. 想着如果再不记下去年那些事儿 ...

  4. Debian CentOS修改时区

    Debian修改时区: dpkg-reconfigure tzdata https://wiki.debian.org/TimeZoneChanges CentOS修改时区: timedatectl ...

  5. Kafka学习笔记2--Kafka的服务端配置

    下载解压 kafka 后,在 kafka/config 下有 3 个配置文件与主题的生产.消费相关. server.properties--服务端配置 producer.properties--生产端 ...

  6. Application类-欢迎页(初始界面)

    在程序界面显示前,如果我们处理了很多耗时操作,这个时候给用户提示一个欢迎页便是十分友好的.WPF为我们提供了这个特性: 第一种方法:通过设置图片资源的生成操作 粘贴一个图片到我们的项目中 在解决方案管 ...

  7. C#使用post方式提交json数据

    尝试了一天,尝试了各种方法,一下方法最直接方便. //地址 string _url = "https://www.dXXXayup.ink/api/User/Login"; //j ...

  8. Spring事件监听机制

    前言 Spring中的事件机制其实就是设计模式中的观察者模式,主要由以下角色构成: 事件 事件监听器(监听并处理事件) 事件发布者(发布事件) 首先看一下监听器和发布者的接口定义 public int ...

  9. 开发工具--PyCharm

    工具|PyCharm 主要介绍关于PyCharm的使用小技巧,方便自己使用这款软件. 前戏准备 1.下载pycharm: 官方网站(鼠标单击) 2.安装(自己百度一下,教程很多) 正式开始 PyCha ...

  10. 【selenium】基于python语言,如何用select选择下拉框

    在项目测试中遇到了下拉框选择的控件,来总结下如何使用select选择下拉框: 下图是Select类的初始化描述,意思是,给定元素是得是select类型,不是就抛异常.接下来给了例子:要操作这个sele ...