首页 > 其他分享 >Codeforces Round 970 (Div. 3)

Codeforces Round 970 (Div. 3)

时间:2024-09-07 23:02:30浏览次数:10  
标签:970 int Codeforces long cin 偶数 flag solve Div

A. Sakurako's Exam
分类讨论即可,当a为奇数,无法消去1,或者a==0且b为奇数时,无法消去2

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef  pair<int,int> pii;

void solve()
{
	int a,b;
	int flag=1; 
	cin>>a>>b;
	if(a&1 ) flag=0;
	else if(a==0 and b&1) flag=0;
	
	if(flag) cout<<"Yes";
	else cout<<"No";
	cout<<endl;
	
}

signed main()
{
	int t=1;
	cin>>t;
	while(t--) solve();
}

B. Square or Not
这题被hack了,假如是64,每行16个,虽然是美丽矩阵,但不是正方形,所以要保证第一个0的下标-1的平方为n,这样才可以确保是个正方形。

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef  pair<int,int> pii;

void solve()
{
	int flag=1;
	int n; cin>>n;
	if(sqrt(n)!=(int)sqrt(n)) flag=0;
	string s;
	cin>>s;
	
	int p=s.find('0');
	if((p-1)*(p-1)!=n&&n!=4) flag=0;
	if(flag) cout<<"Yes";
	else cout<<"No";
	cout<<endl;
	
	
}

signed main()
{
	int t=1;
	cin>>t;
	while(t--) solve();
}

C. Longest Good Array
可以暴力枚举,也可以二分答案

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef  pair<int,int> pii;

void solve()
{
	int a,b;
	cin>>a>>b;
	int l=2,r=1e9;
	b-=a;
	int mid;
	while(l<=r)
	{
		mid=(l+r)>>1;
		if(mid*(mid-1)/2<=b) l=mid+1;
		else r=mid-1;
	}
	cout<<l-1<<endl;
}

signed main()
{
	int t=1;
	cin>>t;
	while(t--) solve();
}

D. Sakurako's Hobby
题目问的是从i出发可以获得的黑块次数,一个排列可以分成有限个循环,比如1 2 4 5 3,可以分成1 和2和4 5 3 4,在第三个循环当中,从i=3或i=4或i=5出发经历的元素是一样的,所以得到的黑块次数也是一样的。

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef  pair<int,int> pii;

void solve()
{
	int n; 
	cin>>n;
	int p[n+1]={0},ans[n+1]={0};
	int us[n+1]={0};
	for(int i=1;i<=n;i++) cin>>p[i];
	string s;
	cin>>s;
	for(int i=1;i<=n;i++)
	{
		if(us[i]) continue;
		int sz=0;
		//计算这个循环每个元素应该有多少个黑块次数 
		while(!us[i])
		{
			us[i]=1;
			sz+=s[i-1]=='0';
			i=p[i];
		}
		//循环遍历去赋值 
		while(us[i]!=2)
		{
			us[i]=2;
			ans[i]=sz;
			i=p[i];//会把一个循环中的数都遍历到 
		}
	}
	for(int i=1;i<=n;i++) cout<<ans[i]<<" ";
	
}

signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t=1;
	cin>>t;
	while(t--) solve();
}

E. Alternating String
分为奇偶来讨论
如果是偶数,我们只需要统计奇数位上出现次数最多的字母和偶数位上出现次数最多的字母,然后用n减掉这两个数就是最小操作次数了
如果是奇数,肯定要选择一个位置删掉,然后再按偶数来进行操作,枚举位置来删除时,这个位置后面的每个字母的奇偶就会变化,比如abcab,奇数位上a(1)偶数位上a(4),删掉c以后呢,a(3),所以对应字母的奇数位数量要加到偶数位的数量上,偶数位上的同理,然后比较再取最大值即可

#include <bits/stdc++.h>
using namespace std;

void solve()
{
	int n;
	cin>>n;
	string s;
	cin>>s;
    int ans=0;
	if(n&1)
	{
		vector pre(2,vector<int>(30));//第0行为偶数数组 第1行为奇数数组 
		auto suf=pre;
		//pre为当前位置前面奇偶位数上字符的数量
		//suf为后面 
		for(int i=0;i<n;i++) suf[i&1][s[i]-'a']++;//统计奇数和偶数位上各字母的数量 
		for(int i=0;i<n;i++)
		{
			suf[i&1][s[i]-'a']--;//枚举删除的位置,删除完这个位置前 
			int res=0;
			for(int k=0;k<2;k++){
			//每个字母在奇数位和偶数位上都会有计数
			//所以两次循环删除这位数以后,奇偶会互换
			//所以把对应的字母的pre[奇][字母]+suf[偶][字母] 反之同理 
			int mx=0;
			for(int j=0;j<26;j++)
			{
				int t=pre[k][j]+suf[k^1][j];
				if(t>mx) mx=t;
			}
			res+=mx;
			}
			//从左往右遍历,所以pre是慢慢增加的 
			pre[i&1][s[i]-'a']++;
			ans=max(ans,res); 
		}
		ans=n-ans;
	}else{
	//偶数 直接找奇偶位置上的最大数量的字母 
		vector res(2,vector<int>(30) );
		for(int i=0;i<n;i++) res[i&1][s[i]-'a']++;
		for(int i=0;i<2;i++)
		{
			auto mx=*max_element(res[i].begin(),res[i].end());
			ans+=mx;
		}
		ans=n-ans;
		
	}
	cout<<ans<<endl;
}



int main()
{
	int t=1;
	cin>>t;
	while(t--) solve();
}

标签:970,int,Codeforces,long,cin,偶数,flag,solve,Div
From: https://www.cnblogs.com/swjswjswj/p/18397255

相关文章

  • Codeforces Round 941 (Div. 1) VP记录
    CodeforcesRound941(Div.1)VP记录我了个掉分场啊。没场切C导致看起来会-50。A排序后差分。它毕竟还是个公平组合游戏,所以如果Alice在一次操作中能够控制能把后手扔给自己还是对面就赢了。然后我们发现如果一个差分值\(x\ge2\)就是必胜的吧。先手可以自己取完......
  • Round 970
    A.Sakurako'sExam算法:模拟具体思路:a个1,b个2,使他们的和为0;规律:1.当两个数中,一个数不存在时,另一个数的个数必须要有偶数个2.当1有偶数个时,2可以有奇数个或者是偶数个3.当1有奇数个时,如何都不满足;反思:不要着急,慢慢想ACCode#include<bits/stdc++.h>usingnamespace......
  • Codeforces Round 621 (Div. 1 + Div. 2)
    USACO入侵CFA.CowandHaybales题意:一行\(n\)个数,每次可以将1从一个数移动到相邻的数,求\(d\)次内\(a_1\)最大值。思路:显然先移动\(a_2\),然后依次类推。提交记录B.CowandFriend题意:在二维平面上,一次只能走恰好\(a_1\sima_n\)中的一个数,求从原点走到\((x......
  • CF1469D Ceil Divisions题解
    CF1469DCeilDivisions感觉是很巧妙的一题?一开始想到,对于任何小于$n$的数$x$,直接对它除以$n$可以得到$1$。那么对$3\simn-1$做完此操作后,还剩下$1$、$2$、$n$。将$n$变成$1$要花费$logn$次,显然总操作次数超过了$n+5$次。进一步地,发现瓶颈在于把$n$变成$1$,于是利用根号,用$\sqr......
  • CodeForces 2009G Yunli's Subarray Queries 题解
    云璃!高质量Div.4,吊打某些Div.2Only/Edu/Div.3。本题是下面四道题目的有机结合,优雅且经典。LuoguP4168[Violet]蒲公英|LuoguP1997faebdc的烦恼|LuoguP3203[HNOI2010]弹飞绵羊|LuoguP3246[HNOI2016]序列建议先完成这四题。(必须指出:用蒲公英的分块方......
  • Unet改进23:添加DiverseBranchBlock||通过组合不同规模和复杂度的分支来增强单个卷积的
    本文内容:在不同位置添加DiverseBranchBlock目录论文简介1.步骤一2.步骤二3.步骤三4.步骤四论文简介我们提出了一种通用的卷积神经网络(ConvNet)构建块,在不需要任何推理时间成本的情况下提高其性能。该块被命名为多元分支块(DBB),通过组合不同规模和复杂度的分支来增强......
  • Codeforces Round 968 (Div. 2)
    Preface今天课比较少,就抽点时间补一下之前欠的CF这场总体来说题还算简单,E1之前的题基本都是一眼,不过E2没往转化到区间不交的情况想,F更是完全没想到colorcoding,只能说太菜太菜A.TurtleandGoodStrings不难发现只要比较开头和结尾的字符是否相同即可#include<cstdio......
  • 《魔兽世界》divxdecoder.dll丢失怎么办?轻松解决指南
    在深入艾泽拉斯大陆的冒险旅途中,每一位玩家都希望拥有流畅且无碍的游戏体验。然而,技术问题偶尔会像突如其来的部落突袭一样打断我们的探索。其中,“divxdecoder.dll丢失”错误便是不少玩家可能遇到的一个小障碍。别担心,本文将为您提供一套简单易行的解决方案。divxdecoder.dll......
  • Codeforces Round 947 (Div. 1 + Div. 2) VP记录
    CodeforcesRound947(Div.1+Div.2)VP记录我是唐诗,我是唐诗,我是唐。场切:ABCE。笑点解析D是我不在场的GJ模拟赛的T1签到题。A找\(a_i<a_{i-1}\)然后按数量分讨即可。B最小值要取,不能被最小值表示出来的数的最小值要取,暴力即可。C先对相邻两个值的较小......
  • Codeforces LATOKEN Round 1 (Div. 1 + Div. 2)
    A.ColourtheFlag题意:给定一个棋盘,一些格子已经染上黑白色,判断能否将剩下的格子染色,使得相邻格子不同色。输出构造。思路:考虑一个棋盘的合法染色方案只有两种,分别比较一下即可。提交记录B.HistogramUgliness题意:一个柱状图,权值定义为操作次数加上竖直方向的周长。一次......