首页 > 其他分享 >Codeforces Round #813 (Div. 2)A-D

Codeforces Round #813 (Div. 2)A-D

时间:2022-08-15 00:26:35浏览次数:84  
标签:return cout int rep cin Codeforces ans Div 813

Codeforces Round #813 (Div. 2)A-D

过程

本场A,B快速签到,但C卡了一下,D做法一开始直接把小的变大,然后发现假了,把自己hack了,随后想到了三分寻找最合适的变连续的一串从小到大的数字,但还是假了,只能赛后补提了。
传送门

题目

A

统计前k个数里面有多少个大于k即可

void Solve(){
 cin>>n>>m;
 vector<int>a(n+1);
 rep(i,1,n) cin>>a[i];
 int ans=0;
 rep(i,1,m) if(a[i]>m) ans++;
 cout<<ans<<endl;
}  

B

因为n与n-1互素,所以lcm(n,n-1)=n(n-1),而lcm(a,b)<=ab,故此时lcm为最大值,因此从大到小搭配即可。

void Solve(){
 cin>>n;vector<int>a(n+1);
 rep(i,1,n) a[i]=i;
 for(int i=n;i>1;i-=2) swap(a[i],a[i-1]);
 rep(i,1,n) cout<<a[i]<<" ";
 pts;
}  

C

如果出现\(a_i>a_{i+1}\),n那么此时\(a_i\)之前的所有元素都要变为0,那么记录一个\(b_{a[i]}\)表示\(a_i\)这个值是否已经变为0,维护一个单调栈,变为0的次数即为答案

int n;
void Solve(){
 cin>>n;vector<int>a(n+1),b(n+1);
 rep(i,1,n) cin>>a[i],b[a[i]]=a[i];
 vector<P>c;int ans=0;
 rep(i,1,n){
  if(!c.size()) c.pb(P(b[a[i]],a[i]));
  else if(c.back().first<=b[a[i]]) c.pb(P(b[a[i]],a[i]));
  else if(c.back().first>b[a[i]]) {
   for(auto x:c) {
    if(b[x.second]) ans++;
    b[x.second]=0;
   }
   c.clear();c.pb(P(b[a[i]],a[i]));
  }
 }
 cout<<ans<<endl;
}  

D

因为是完全图,所以\(u-v\)只需要经过两次最小的\(a_i\)即可到达,这是其中一个限制。其次对于\(\max_{1\leq u<v\leq n}d(u,v)\),因为区间最小值是单调递减的,因此上式等价于\(\max_{1\leq i\leq n-1} min(a_i,a_{i+1})\).

那么我们可以二分这个最大距离\(x\),对于\(2*a_i<x\)的\(a_i\),将其修改为为\(1e9\),否则最大距离\(x\)不可行。
之后看\(\max_{1\leq i\leq n-1} min(a_i,a_{i+1})\)是否大于\(x\),如果大于则当前\(x\)可行,如果不大于,如果只剩一次修改机会,那就需要判断是否存在一个\(a_i\geq x\),如果存在,将其左右的数修改即可满足条件,否则无法满足条件,对于剩两次以上修改机会,则已经满足条件,满足二分性。

至此,二分范围为\(1-1e9\),可解决问题。

int n,k;
bool check(int x,vector<int>c){
 int num=k;
 rep(i,1,n){
  if(c[i]*2<x) num--,c[i]=1e9;
 }
 if(num<0) return 0;
 int maxx=-1;
 rep(i,1,n-1) maxx=max(maxx,min(c[i],c[i+1]));
 if(maxx>=x) return 1;
 if(num==0) return 0;
 if(num>1) return 1;
 rep(i,1,n){
  if(c[i]>=x) return 1;
 }
 return 0;
}
void Solve(){
 cin>>n>>k;
 vector<int>a(n+1),c;vector<P>b(n+1);
 rep(i,1,n) cin>>a[i];
 int l=1,r=1e9,ans=r;
 while(l<=r){
  c=a;
  int mid=(l+r)>>1;
  if(check(mid,c)) ans=mid,l=mid+1;
  else r=mid-1;
 }
 cout<<ans<<endl;
}  

E1,E2

待补

标签:return,cout,int,rep,cin,Codeforces,ans,Div,813
From: https://www.cnblogs.com/Mr-leng/p/16586815.html

相关文章

  • CodeForces-1702G Passable Paths
    PassablePathsLCA在树上找到形容一条链,只用找到链的两个端点即可,因此这题的初始想法就是找端点第一个端点:深度最深的地方第二个端点:离第一个端点最远的那个点找到两......
  • Codeforces Round #813 (Div. 2) (补题中)
    战绩:  A.WonderfulPermutation签到题。计算前k个就把最小的那k个转移到前k项,看数组前k项缺多少最小前k项就行,可以在O(k)的复杂度内解决。intmain(){rea......
  • Codeforces
    EducationalCodeforcesRound132(RatedforDiv.2)B#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constllN=1e5+5;lla[N],s1[N],s2[N],......
  • Codeforces Round #813 (Div. 2)
    这一场打得很稀烂QwQ。开局先看A,开始秒想了一个假掉的做法,WA了3发,以后一定要先证明正确性再写。。。A写了16分钟。。。B很快在35分钟的时候秒掉了,C想到了一个暴力做法,......
  • Codeforces Round #813 (Div. 2) A~C
    A.WonderfulPermutation  Youaregivenapermutation p1,p2,…,pnp1,p2,…,pn oflength nn andapositiveinteger k≤nk≤n.Inoneoperationyoucanc......
  • Codeforces 121 E
    感觉我数据结构有些弱,最近开始练习难道为2300~2700的数据结构题。首先我们发现,luckynumber不会太多,最多就是\((2^1+2^2+2^3+2^4+1)=31\)个(最后加\(1\)是对于所有\(x>7777......
  • 20220813 夜间闲话
    今天下午有一场模拟比赛。毫不奇怪,我又跌到了谷底。幸好奇瑞不在,不然又要被骂了。dkd和lh为AK取得好成绩,为cqyz争光。不出所料,lhAK非常快。T1是一个很微妙的贪心(其实并......
  • DFS记忆化搜索--Divider & Conquer + Hashmap(数字三角形)
    记忆化搜索是DP的一种实现方式,等价于动态规划一个经典的例子:数字三角形给定一个三角形triangle,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相......
  • 20220813 早间闲话
    今天早上八点,我们拿到了我亲爱的电话,我发现我的朋友都疯了,所以我疯了。Lh和Dkd在玩弗洛瑞,他们说lrc太强了,提升空间太小了。他对dkd经常押韵感到震惊。lh正在下载一个......