首页 > 其他分享 >Codeforces Round 960 (Div. 2)

Codeforces Round 960 (Div. 2)

时间:2024-07-21 21:18:29浏览次数:10  
标签:f2 960 奇数 ll Codeforces le2 le4 答案 Div

xht真的好强好强,好厉害

这场打得有点史,共四发罚时还是抽象了,如果没有xht就真的完了呜呜。不过也说明我是真的菜,还有把做法想出来之后验证不到位。

A. Submission Bait

罚时了,15min 才过/lh

稍微想一下可以知道,对于最大数 \(x\),若其出现次数为奇数,那么 A 是必胜的,反之则只能从更小的数开始博弈。结论:当存在出现次数为奇数的数时 A 必胜。因为一个数的出现次数是偶数时是必败态,而 A 就可以让 B 行动时的状态成为必败态。
其实想得挺快的,两三分钟就想到这个解法了,但是因为奇数打成偶数(真的服了自己)导致被人反驳然后一直不敢交/qd

B. Array Craft

罚了两发,更是重量寄。

我们先假设除了 \(1,-1\) 还可以放 \(0\),这样的话构造方案显然是将 \([y,x]\) 赋值为 \(1\),其余为 \(0\)。但是不能填 \(0\),所以考虑将一个 \(0\) 拆成 \(1,-1\) 或 \(-1,1\)。那么答案就显然了:\([1,y-1]\) 倒着轮流填 \(-1,1\) 保证 \(a_{y-1}!=a_y\),\([y,x]\) 填 \(1\),\([x+1,n]\) 轮流填 \(-1,1\)。

C. Mad MAD Sum

先手推一下变换过程。第一次变换会得到一个递增序列 \(b\),再对 \(b\) 进行操作后得到序列 \(c\),发现后续操作每次只会使得 \(c\)
整体向右移一位,也就是删掉 \(c\) 末尾的数,所以对 \(c\) 操作得到的答案就是 \(\sum\limits_{i=1}^n c_i\times(n-i+1)\),注意还要加上前两次变换得到的答案。

D. Grid Puzzle

感觉比 C 好想?

手玩,初步发现染 \(2\times 2\) 的操作会更有的情况只有两种:\(a_i\le2,a_{i+1}\le2\) 或 \(a_i\le2,a_{i+1}\le4,a_{i+2}\le4,a_{i+3}\le2\)。再多考虑一些,发现第二种情况实际上是:\(a_i\le2,a_j\le2,a_k\le4 (i<k<j,i+3\le j)\)。

那么直接 \(1\sim n\) 顺次模拟一遍就行了,开个 \(f1,f2\) 数组记录每一行的前半段和后半段是否被覆盖过,防止答案算重。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=2*114514,M=1919810;
ll T;
ll n,m,k,a[N],ans;
bool f[N],f2[N];
void solve(){
	cin>>n;
	ans=0;
	for(int i=1;i<=n;++i) cin>>a[i],f[i]=f2[i]=0;
	for(int i=1;i<=n;++i){
		if(a[i]<=0||(a[i]<=2&&f[i])||(a[i]<=4&&f[i]&&f2[i])) continue;
		if(a[i]<=2) f[i]=f[i+1]=1,++ans;
	    else if(a[i]<=4){
	    	if(f2[i]) f[i]=f[i+1]=1;
	    	else if(f[i]) f2[i]=f2[i+1]=1;
		    ++ans;
    	}
    	else ++ans;
    }
	cout<<ans<<'\n';
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>T;
	while(T--) solve();
	return 0;
}

E1. Catch the Mole(Easy Version)

有点思路,大概是根号分治,赛时只剩半个小时写不出来了,现在懒得补。

大概思路是在深度超过 \(\sqrt{n}\) 的子树中询问,然后…………?

标签:f2,960,奇数,ll,Codeforces,le2,le4,答案,Div
From: https://www.cnblogs.com/heshuwan/p/18314929

相关文章

  • [Codeforces Round 960 (Div. 2)]A-E
    CodeforcesRound960(Div.2)A-EA题意:公平博弈。给定一个数组n个数,每个数只能用一次。给一个\(mx\)。每次轮到自己操作的时候就选一个数组里的数,满足\(a[i]>=mx\),然后令\(mx=a[i]\).双方轮流做直到一方无法操作,则另一方取胜。Sol:赛时1min猜了个错解,只看最大值,只看最大值的出......
  • Codeforces Round 958 (Div. 2)
    Preface周末补题计划的最后一场,这场由于是最古早的所以有些题题意都记不太清了赛时经典发病,前四题一题WA一发,然后把时间打没了E题经典没写完(中间还抽空写了个假做法),邮电部诗人了属于是A.SplittheMultiset刚开始还感觉无从下手,写了个记搜交上去还WA了,后面发现每次分......
  • Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2)
    Preface这场比赛的时候CF一直抽风,快10min的时候才登上去,然后中间交题也一直在人机验证50min左右过了前5题后,F没想到生成树当场趋势了,赛后发现原来是原题大战可海星A.DiverseGame将每个数循环移位变为下一个数即可,注意特判\(n=m=1\)的情形#include<cstdio>#incl......
  • Array Craft(Round 960)
    #include<bits/stdc++.h>#defineendl'\n'usingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();signedmain(){#ifdefGordenfreopen("in.txt","rt",stdin);freopen......
  • Mad MAD Sum(Round 960)
    #include<bits/stdc++.h>#defineintll#defineendl'\n'usingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();signedmain(){#ifdefGordenfreopen("in.txt","rt",stdin......
  • Codeforces Round 958 (Div. 2)
    A.SplittheMultisetForexample, {2,2,4} isamultiset.Youhaveamultiset ......
  • Codeforces Round 960 (Div. 2)(A - D)
    CodeforcesRound960(Div.2)(A-D)A-SubmissionBait解题思路:假设直接选最大数,如果最大数有奇数个,\(Alice\)必胜,反之必败。根据这个思路,从大到小看数字,找到第一个出现奇数次的数,从它开始选,就能保证每次\(Alice\)选的时候还剩奇数个选项。代码:#include<bits/stdc++.......
  • Codeforces Round 960 (Div. 2)
    Preface周日开始补之前欠下的CF博客,这周一共有三场就按照从后往前的顺序补吧这场经典前期唐完了,前4题上来每题WA一发也是神人了,最后做到E的时候只有50min了结果还把题看错了以为树的形态都是不确定的,怀疑人生了好久感觉这个题完全没法做,后面看了眼样例才发现树的形态......
  • Codeforces Round 960(Div.2)
    CodeforcesRound960(Div.2)A从大到小去判断数字个数的奇偶性,只要出现过奇数,先手必赢,如果不出现奇数,后手必赢#include<iostream>#include<queue>#include<map>#include<set>usingnamespacestd;constintN=55;inta[N];voidsolve(){ intn; cin>>n; ma......
  • 题解:Codeforces Round 960 (Div. 2) D
    D.GridPuzzletimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputYouaregivenanarray\(a\)ofsize\(n\).Thereisan\(n\timesn\)grid.Inthe\(i\)-throw,thefirst\(a_i\)......