首页 > 其他分享 >Codeforces Round #885 (Div.2) Editorial

Codeforces Round #885 (Div.2) Editorial

时间:2023-07-17 11:13:37浏览次数:37  
标签:ver1 ver2 ver int Codeforces long Editorial Div.2 define

B - Vika and the Bridge

题意:从桥的一边走到另一边,每次只能踩在相同颜色的木板上,并且有一次操作,可以修改期中一个模板的颜色。 问那种走法,跨过模板的最大值最小。
思路:首先可以统计出选择每种颜色的,跳过木板的的个数,如果不能修改颜色,那么答案一定是每个颜色所对应的最大值的最小值,因为现在可以修改,所以对于每种颜色来说,就不一定是最大值了。最大值/2,与次大值比较,k值很小,二维度vector存,sort排序,比较最大值/2和次大值即可
代码:

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
#define max(ver1,ver2) (ver1>ver2?ver1:ver2)
#define min(ver1,ver2) (ver1>ver2?ver2:ver1)
#define lowbit(ver) ver&(-ver)
#define PII pair<int,int>
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define debug(ver) cout<<#ver<<" = "<<ver<<"\n"
#define debug2(ver,ver2) cout<<#ver<<" = "<<ver<< "  " << #ver2 << " = " << ver2 <<"\n"
#define eps 1e-9
#define pb push_back
using namespace std;

const int N = 1e6 + 10, M = N * 4, mod = 1e9 + 7;

int n, m, k;
int a[N];
int c[N];
void solve()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>a[i];
    a[0]=0;
	for(int i=0;i<=k;i++) c[i]=0;
	vector<int> ve[k+1]; //开里面不用初始化
	for(int i=1;i<=n;i++) //统计对应颜色所跨越木板个数
	{
		ve[a[i]].push_back(i-c[a[i]]-1); 
		c[a[i]]=i;
	}
	int ans=n+1;
	for(int i=1;i<=k;i++)
	{
		ve[i].push_back(n-c[i]); //对应颜色最后一块木板,到终点的距离。
		sort(ve[i].begin(),ve[i].end() );
		int x=ve[i][ve[i].size()-1]; //最大值
		int y=ve[i][ve[i].size()-2]; //次大值
		 x=max(y,x/2);
		 ans=min(ans,x);
	}
	cout<<ans<<"\n";


}
signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int T=1;
    // scanf("%lld",&T);
     cin>>T;
    while(T--)
    {
        solve();
    }
    
    return 0;
}

C Vika and Price Tags
题意:判断是都可以生成全零数组。
思路:先打单独判断一位数,打表找规律,发现 多次操作后一定会出现 0 x x 0 x x 0 ,所以只需要找到每个数第一次出现0的位置即可。的到数组c,如果c中数差值都是三的倍数,则能变成全零数组。
代码:

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
#define max(ver1,ver2) (ver1>ver2?ver1:ver2)
#define min(ver1,ver2) (ver1>ver2?ver2:ver1)
#define lowbit(ver) ver&(-ver)
#define PII pair<int,int>
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define debug(ver) cout<<#ver<<" = "<<ver<<"\n"
#define debug2(ver,ver2) cout<<#ver<<" = "<<ver<< "  " << #ver2 << " = " << ver2 <<"\n"
#define eps 1e-9
#define pb push_back
using namespace std;

const int N = 1e6 + 10, M = N * 4, mod = 1e9 + 7;

int n, m, k;
int a[N];
int c[N];
int b[N];
int ck(int x,int y)//返回第一次出现零的位数
{
	if(x==y) return 1; //相等下一位一定是0
	if(x<y)
	{
		return ck(y,abs(x-y))+1; //下次 y 一定大于 x
	}
	
	else 
	{
		if(x/y<=2) // 
		{
		
			return ck(y,abs(x-y))+1;
		}
		else //这是一个规律,每次没经过三次,相当于 x值减去 两个 y
		{
			int w=x/y;
			w=w/2;
			return ck(x-w*(2*y),y)+3*w;
			
		}
		
	}
}
void solve()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) cin>>b[i];
    
    int tot=0;
   	for(int i=1;i<=n;i++)
   	{
   		if(a[i]==0&&b[i]==0) continue; //0 0 一直是零不考虑
   		else if(a[i]==0) c[tot++]=1; //特判
   		else if(b[i]==0) c[tot++]=2; // 
   		else
   		c[tot++]=ck(a[i],b[i])+2; //加二表示前两位
	}
	int flag=1;
	for(int i=1;i<tot;i++)
	{
		if(abs(c[i]-c[i-1])%3!=0) flag=0;
	}
     if(flag) cout<<"YES\n";
     else cout<<"NO\n";


}
signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int T=1;
    // scanf("%lld",&T);
     cin>>T;
    while(T--)
    {
        solve();
    }
    
    return 0;
}

标签:ver1,ver2,ver,int,Codeforces,long,Editorial,Div.2,define
From: https://www.cnblogs.com/xxj112/p/17559466.html

相关文章

  • Codeforces Round 883 (Div. 3)
    只写部分题目。A.RudolphandCuttheRope#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=2e5+5;intt,n,a[N],b[N];signedmain(){ cin>>t; while(t--){ cin>>n; intres=0; for(inti=......
  • CodeForces 1844C Particles
    洛谷传送门CF传送门原题是[ARC092E]BothSidesMerger。Keyobservation:每个元素的下标奇偶性不改变。于是讨论最后一个数是下标为奇数还是偶数加起来的数。将下标奇偶性相同的元素分开考虑。对于下标奇偶性相同的元素,不难发现答案的上界是所有\(>0\)的元素之和(没有\(>......
  • Educational Codeforces Round 33 (Rated for Div. 2)
    EducationalCodeforcesRound33(RatedforDiv.2)https://codeforces.com/contest/893昨日vp,今日补完FD贪心,思路值得学习;E组合数学推式子,式子不难,关键在于模型抽象F主席树,调了老半天,关键在于要理解查询函数的含义,确定什么时候能返回。A.ChessForThree居然卡了快十分......
  • Codeforces Round 896 Div2 A-D题解
    CodeforcesRound896A.Politics这题问的是,给一些人的在n个议题的观点,然后你可以随意安排顺序,每个议题人多的赢,反对派会离开,问随便安排议题,最多留下多少人,包括我自己这个题刚开始愣了半天,但是想到,那只要把所有和我观点一致的给留下来不就行了???然后交上去就AC了ACCode#inclu......
  • Codeforces Round #875 (Div. 2) A-D
    比赛链接A代码#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;boolsolve(){intn;cin>>n;for(inti=1;i<=n;i++){intx;cin>>x;cout<<n-x+1<<"......
  • Codeforces Round 884
    目录写在前面ABCDEF1F2学到了什么写在前面比赛地址:https://codeforces.com/contest/1844。什么?你怎么知道我连C都没过掉了一伯伍拾昏?吐槽一下马娘前期甚至动画第一季都没出之前的很多个人角色曲,听起来就是很无聊的动漫op风。比如进王的这首:感觉给哪个笨蛋阳光系角色都能......
  • Educational Codeforces Round 137 (Rated for Div. 2)
    EducationalCodeforcesRound137(RatedforDiv.2) A.Passwordvoidsolve(){intn=read();for(inti=1;i<=n;i++)intx=read();cout<<combination(10-n,2)*6<<'\n';//puts(ans>0?"YES":"NO");......
  • Codeforces Round #881 (Div. 3) A-F
    比赛链接A代码#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;inta[57];boolsolve(){intn;cin>>n;for(inti=1;i<=n;i++)cin>>a[i];sort(a+1,a+n+1);intsum=0;for(inti......
  • Codeforces Round 881 (Div. 3) D - Apple Tree(dfs)
    https://codeforces.com/contest/1843/problem/D题目大意:一颗树中,每次给定两个结点,每个结点都可以移动到孩子结点,最后可以到达叶子结点,问我们这两个结点最终移到叶子结点有多少种组合?(其实就是让求以这两个节点为根的子树的叶子结点个数的乘积)input2512345332......
  • Codeforces Round 875 (Div. 2)
    CodeforcesRound875(Div.2)A-TwinPermutations思路:让序列全相等为n+1即可#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;typedefpair<string,int>PSI;typedefpair<string,string>PSS;constintN=2e5+5,INF=0x3f3f......