首页 > 其他分享 >CF-943(已更B-E)

CF-943(已更B-E)

时间:2024-05-03 12:22:59浏览次数:13  
标签:pre 10 int cin CF pb now 943

CF- 943(已更 B-E)

D赛时没调出来(╬▔皿▔)╯,还有几分钟的时候反而把E过了,本来应该是上大分一场(⊙﹏⊙),等会会补G1

这假期要刷题,还要补文化课……后面有空的话更一下之前打的线下赛的题解

B

双指针……

void solve(){
	int n,m;cin>>n>>m;
	string a,b;cin>>a>>b;
	int now=0,ans=0;
	rep(i,0,n-1){
		while(a[i]!=b[now]&&now<m) now++;
		if(a[i]==b[now]){//找到的话快指针now移动,合法长度ans++
			now++;
			ans++;
		}
		if(now==m){//找不到就break
			break;
		}
	}
	cout<<ans<<endl;
 

C

用到了一点数学知识

分析

已知 a[i]%a[i-1]=x[i]

则有 (a[i]-x[i])|a[i-1]

|表示能整除

所以 a[i]=k*a[i-1]+x[i]

但同时必有x[i]<a[i-1],由此可以得到k的取值

代码

void solve(){
	int n;cin>>n;
	rep(i,2,n){
		cin>>x[i];
	}
	a[1]=x[2]+1;//由样例可知
	rep(i,2,n){
		int k=1;
		if(i==n){
			a[i]=a[i-1]+x[i];
			continue;
		}
		while(a[i]<=x[i+1]){
			a[i]=k*a[i-1]+x[i];
			k++;
		}
	}
	rep(i,1,n){
		cout<<a[i]<<" ";
	}
	cout<<endl;
	rep(i,1,n+1){
		x[i]=a[i]=0;
	}
}

D

考察了循环结构、顺序结构……反正我赛时是因为这个写假了

分析

暴力枚举两人会在点now开始一直停留,此前已移动了pre次,那么之后对答案的贡献就是$a[now]*(k-pre)$,而此前移动对答案的贡献res我们可以每次移动时就更新一次,我们对其取max就是两人的最大得分

比如10 8 2 10
3 1 4 5 2 7 8 10 6 9
5 10 5 1 3 7 10 15 4 3
对于后手:
一开始now=10,pre=0,res=0,若在该点一直停留对答案的贡献为a[10]*8=24;
此后:
now=9,pre=1,res=3————3+a[9]*7=31
now=6,pre=2,res=7————7+a[6]*6=49
				 ————14+a[7]*5=64
				 ————24*a[8]*4=84
now=10,break;

正解代码

void solve(){
	int n,k,ps,pb;cin>>n>>k>>pb>>ps;
	rep(i,1,n) cin>>p[i];
	rep(i,1,n) cin>>a[i];
	int aa=0,bb=0;
	if(p[pb]==pb) aa=k*a[pb];
	if(p[ps]==ps) bb=k*a[ps];
	int now=pb,pre=0,res=0;
	while(1){
		if(pre<=k){
			aa=max(aa,res+a[now]*(k-pre));
		}
		res+=a[now];
		now=p[now];
		if(now==pb) break;
		pre++;
	}
	now=ps,pre=0,res=0;
	while(1){	
		if(pre<=k){
			bb=max(bb,res+a[now]*(k-pre));
		}
		res+=a[now];
		now=p[now];
		if(now==ps) break;
		pre++;
	}
	if(aa>bb){
		cout<<"Bodya";
	}
	else if(aa<bb){
		cout<<"Sasha";
	}
	else{
		cout<<"Draw";
	}
	cout<<endl;

贴一个赛时样例都过不了的假写法,虽然思路是一样的(╬▔皿▔)╯

int now=pb,pre=0,res=0;
	//cout<<now<<" "<<p[now]<<endl;
	while(p[now]!=pb){//实际上p[now]=pb就跳出了
		//cout<<now<<" "<<p[now]<<" "<<res<<endl;
		if(pre<=k){
			aa=max(aa,res+a[now]*(k-pre));
		}
		//else break; 
		//cout<<aa<<" "<<" "<<pre<<" "<<now<<" "<<res<<endl;
		res+=a[now];
		now=p[now];
		pre++;
	}
	now=ps,pre=0,res=0;
	while(p[now]!=ps){
		if(pre<=k){
			bb=max(bb,res+a[now]*(k-pre));
		}
		//else break;
		//cout<<bb<<" "<<" "<<pre<<" "<<now<<" "<<res<<endl;
		res+=a[now];
		now=p[now];
		pre++;
	}
	cout<<aa<<" "<<bb<<endl;

E

万恶的构造题

void solve(){
	int n;cin>>n;
	if(n==2){
		cout<<"1 1"<<endl<<"2 2"<<endl<<endl;
		return;
	} 
	rep(i,1,n-2){
		cout<<"1 "<<i<<endl;
	}
	cout<<n-1<<" 1"<<endl;
	cout<<n<<" "<<n<<endl<<endl;
}

G1

标签:pre,10,int,cin,CF,pb,now,943
From: https://www.cnblogs.com/mono-4/p/18171101

相关文章

  • CF1950 A~G
    前言报了名没打的一场Div.4,我是怎么想到回去做的呢?上课的时候无聊于是随机了一道1700的题,找到了本场比赛的F题,我那时还没发现。过了差不多\(2\sim3\)天去随机了一道1900,又找到了G题,一看G题竟然只有1900,意识到这是Div.4,就想着AK一场Div.4,结果发现F做过了,这......
  • 题解:CF607E Cross Sum
    Problem给定\(N\)条不平行的直线\(y=\frac{k_i}{1000}x+\frac{b_i}{1000}\),\(N\)条直线总共会有\(\frac{N(N-1)}{2}\)个交点(包含在同一个位置的点,即相同位置算不同的点),找出距离原点前\(K\)近的交点的距离和。$2\leN\le5\times10^4$,\(1\leK\le\frac{N(N-1)}{2}\)......
  • 对于 CF1107E 中 dp 状态设计的一点想法
    不太想发到洛谷讨论区,就往这里放了。我觉得现有的题解都没说明白为什么本题的状态和转移能覆盖所有情况,并且感觉也非常不自然,没见过的话感觉挺难发现这么一个东西。然而这个dp其实是可以自然地推导出来的。首先发现这个过程非常难以描述,主要原因在于很难刻画一个局面。然而,如......
  • CF85E Guard Towers
    CF85EGuardTowers二分+二分图看到最大值最小,考虑二分。二分距离最大值,限制了某些点对不能分到同一组,明显的二分图模型。用这些限制条件建图,跑二分图染色,看是否能分为二分图即可。考虑方案数的计算,题目中方案数不同的要求是第一组的集合不同就为不同方案,所以跑完二分图后,图分......
  • CF241E Flights
    CF241EFlights边权转点权+差分约束显然图中不在\(1\)到\(n\)路径上的边是不会影响答案的,所以现在只考虑\(1\)到\(n\)路径上的边。然后就有重要性质,图中\(1\)到\(n\)的所有路径的航程相同可以转化为,对于每个在\(1\)到\(n\)某条路径上的\(u\),都有\(1\)到\(u......
  • Radius 现在是云原生计算基金会(CNCF)的沙箱项目
    在数字化时代,云原生计算技术逐渐成为企业转型的关键。2024-04-25,备受瞩目的开源项目Radius已正式加入云原生计算基金会(CNCF)的沙箱项目![Sandbox]Radius·Issue#65·cncf/sandbox(github.com)这个消息让业界瞩目,加入CNCF的沙箱项目,不仅是对Radius技术实力的认可,也是Radi......
  • CF981F Round Marriage
    传送门首先最小化最大,一眼鉴定为二分。二分这个最大值\(k\),问题变成判断是否能让新郎新娘匹配,每一对距离\(\lek\)。如果把新郎新娘视作二分图,每个点只和距离\(\lek\)的点连边,问题就是求是否有完美匹配。完美匹配判定,可以联想到Hall's定理。先把环复制一遍,然后在链上......
  • CF628F Bear and Fair Set
    传送门网络流好题。先将所有限制按\(u_i\)排序,同时令\(u_0=0,t_0=0\)和\(u_{q+1}=b,t_{q+1}=n\)。(下面就把\(q\leftarrowq+1\)了)这些限制会把\(1\simb\)分成\(q\)段。先检查一遍,如果出现\(u_i\)更大反而\(t_i\)更小,unfair;如果出现一个段内数的个数爆了,unfair......
  • [题解]CF13C Sequence
    CF13CSequence给定\(N\)个数,每次操作可以选其中一个数\(+1\)或\(-1\)。请问要让这个数列不降,最少需要多少次操作?我们用DP解决。对\(a\)从小到大排序,存在\(c\)中。我们用\(f[i][j]\)表示让前\(i\)个元素满足条件,而且这些元素最大值不超过\(c[j]\)的最小操作次数。状态转移方......
  • CF1967B2 Reverse Card (Hard Version) 题解
    题意:求有多少对\((a,b)\)满足\(b\times\gcd(a,b)\equiv0\pmod{a+b},1\lea\len,1\leb\lem\)。首先我们设\(\gcd(a,b)=G,a=i\timesG,b=j\timesG\),显然有\(\gcd(i,j)=1\)。那么可以把原条件转化为\(j\timesG\)是\((i+j)\)的倍数。因为\(\gcd(i+......