Codeforces Round #433
Posted ghostfly233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #433相关的知识,希望对你有一定的参考价值。
我会4题,写了两题,还提交错误n次,掉了40rating(哭丧脸),又被学长D飞了。
学长:我很心疼你的成绩啊;
我:第四题忘记加特判了。。。
学长:暴力还能写挂。
我:。。。。。。
———————————————————我是分割线———————————————————
T1:给定一个n,求一个分数a/b(满足a+b=n)且gcd(a,b)=1,使这个分数<1且最大。。
我:。。。。
#include<cstdio> #include<cmath> using namespace std; int gcd(int x,int y){return y==0?x:gcd(y,x%y);} int n; int main(){ scanf("%d",&n); for(int i=(n-1)/2;i>=1;i--){ if(gcd(i,n-i)==1){printf("%d %d\n",i,n-i);break;} } }
———————————————————我是分割线———————————————————
T2:一共有n个点,其中k个点已经有人居住,求旁边有人居住的空置的点至少有几个,最多有几个。
我:。。。。。。(如果n==k||k==0输出0 0,否则输出1和j(k*3<=n?j=n-k:j=k*2))
我:假题。
#include<cstdio> using namespace std; long long n,k; int main(){ scanf("%I64d%I64d",&n,&k); if(n==k||k==0)puts("0 0"); else { printf("1 "); if(k*3<=n)printf("%I64d",k*2); else printf("%I64d",n-k); } }
———————————————————我是分割线———————————————————
T3:有n个航班, 第i个航班原始是从第i秒起飞的。不过由于延误,前k秒不能起飞飞机,要求你让每一个航班在k+1~k+n秒中选一个时间起飞(不能重复),而且每一个航班延误1秒花费的代价为ci,要你求最小的代价。
我:。。题目正常了。
感觉尽量让ci越大的航班延误时间越小越好。所以。。大胆猜想!不用证明!
我们把ci按照时间顺序扔进大根堆里中,然后统计答案就好了。
然后我想到了,考场上没来得及写啊(抓狂~~~)
#include<cstdio> #include<vector> #include<queue> using namespace std; int g[300005],n,k,c[300005]; typedef pair<int,int> ii; int main(){ int n,k; scanf("%d%d",&n,&k); for(int i=0;i<n;i++)scanf("%d",&c[i]); priority_queue<ii>pq;k--; long long cost=0; for(int i=0;i<n||(!pq.empty());i++){ if(i<n) pq.push(ii(c[i],i)); if(i>k){ ii re=pq.top(); pq.pop(); cost+=1LL*re.first*(i-re.second); g[re.second]=i+1; } } printf("%I64d\n",cost); for(int i=0;i<n;i++) printf("%d ",g[i]); }
———————————————————我是分割线———————————————————
T4:
———————————————————我是分割线———————————————————
以上是关于Codeforces Round #433的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D
Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) A
codeforces比赛题解#854 CF Round #433 (Div.2)
Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) C. Planning