Codeforces Global Round 3
Posted bxd123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Global Round 3相关的知识,希望对你有一定的参考价值。
A. Another One Bites The Dust
有三种序列 a b ab 给出各数量
求连成的最长长度 (相邻两个字符不同)
签到水题:
#include<bits/stdc++.h> using namespace std; //input by bxd #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m) #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s); #define ll long long #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) ////////////////////////////////// #define inf 2147483647 const int N=1e6; const int M=1e6; int main() ll a,b,c; cin>>a>>b>>c; ll ans=2*c; ans+=min(a,b)*2; if(a!=b)ans+=1; cout<<ans; return 0;
B. Born This Way*
题意:有两条航线 航线1 :a-b 航线2:b-c
有人要从a-c
给出各个航线的起始时间 和两个t(表示两种航线的航线时间 航线相同的航行时间相同)
你可以取消k次 让该人到达时间最晚(不能到达输出-1)
挺好的一题, 题目给出的时间为递增 显然是二分
但还是想错了两次 在这题浪费了太多时间QAQ
可以枚举航线1删除的个数 t 显然删除的方法只有一种 那就是从1开始删除t个 然后下面二分查找就解决了。。。
#include<bits/stdc++.h> using namespace std; //input by bxd #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m) #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s); #define ll long long #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) ////////////////////////////////// #define inf 2147483647 const int N=1e6; const int M=1e6; ll a[N],b[N],t1,t2,k,n,m; int main() cin>>n>>m>>t1>>t2>>k; rep(i,1,n)scanf("%lld",&a[i]),a[i]+=t1; rep(i,1,m)scanf("%lld",&b[i]); if(n<=k||m<=k)printf("-1");return 0; ll ans=0; rep(i,0,k) int pos=lower_bound(b+1,b+1+m,a[1+i])-b; pos+=(k-i); if(pos>m)printf("-1");return 0; ans=max(ans,b[pos]+t2); cout<<ans; return 0;
C. Crazy Diamond
给定一个1-n的乱序序列 n为偶数
要求通过操作 使得有序化
输出操作的过程(不要求操作最小化)
其实思路很好想 就是一个贪心 中间两个是最难放的 从中间开始即可
编码浪费了太多时间。。。。
#include<bits/stdc++.h> using namespace std; //input by bxd #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define RI(n) scanf("%d",&(n)) #define RII(n,m) scanf("%d%d",&n,&m) #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k) #define RS(s) scanf("%s",s); #define ll long long #define REP(i,N) for(int i=0;i<(N);i++) #define CLR(A,v) memset(A,v,sizeof A) ////////////////////////////////// #define inf 2147483647 const int N=1e6; const int M=1e6; int a[N],L,R,n,cnt,ans[N][2],pos[N]; void change(int x,int y) ans[++cnt][0]=x; ans[cnt][1]=y; swap(a[x],a[y]); swap(pos[ a[x] ],pos[ a[y] ]); int main() RI(n); rep(i,1,n)RI(a[i]),pos[ a[i] ]=i; L=n/2;R=L+1; int key=n/2; rep(i,1,key) if(pos[L]!=L) if(abs(pos[L]-L)>=key) change(pos[L],L); else if(abs(pos[L]-1)>=key) change(pos[L],1); if(abs(pos[L]-n)>=key) change(pos[L],n); if(abs(pos[L]-L)>=key) change(pos[L],L); if(pos[R]!=R) if(abs(pos[R]-R)>=key) change(pos[R],R); else if(abs(pos[R]-n)>=key) change(pos[R],n); if(abs(pos[R]-1)>=key) change(pos[R],1); if(abs(pos[R]-R)>=key) change(pos[R],R); L--;R++; cout<<cnt<<endl; rep(i,1,cnt) printf("%d %d\\n",ans[i][0],ans[i][1]); return 0;
以上是关于Codeforces Global Round 3的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Global Round 3 B. Born This Way