首页 > 其他分享 >Educational Codeforces Round 149 (Rated for Div. 2)

Educational Codeforces Round 149 (Rated for Div. 2)

时间:2023-10-21 09:44:05浏览次数:38  
标签:Educational Rated ll Codeforces tot fo ans include define

这场D被切穿了。

A题
答案为
x 或者 x-1 1

B题
答案就是最长的连续一段的长度+1

证明的话大概可以将它看成是几段连续上升和下降的段,然后在峰谷、峰顶分别填上最小、最大,剩下的就依次递增或递减就行。

C题
将一段连续的0/1视作一个块,那么我们最小化这个块的数量就行。

D题如果猜到如果有解那么ans<=2,就变得非常简单。

E题

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<vector>
#define A puts("YES")
#define B puts("NO")
#define fo(i,a,b) for (ll (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (int (i)=(b);(i)>=(a);(i)--)
#define mk(x,y) make_pair((x),(y))
using namespace std;
typedef double db;
typedef long long ll;
const int N=1e6+5;
const ll mo=998244353;
ll n,a[N],k,c[N],b[N],d[N];
vector<ll> v;
ll f[N],ans,size,tot,res;
int main()
{
//	freopen("data.in","r",stdin);	
	
	
	scanf("%lld",&k);
	n=1<<k;
	
	fo(i,1,n){
		a[i]=-1;
	}
	
	fo(i,1,n) {
		scanf("%lld",&d[i]);
		a[d[i]]=i;
	}
	
	f[0]=1; 
	b[0]=1;
	fo(i,1,n) {
		f[i]=f[i-1]*i%mo;
		b[i]=b[i-1]*2ll%mo;
	}
	
	if (a[1]!=-1) v.emplace_back(a[1]),res++;
	
	ans=1;
	fo(j,0,k-1) {
		fo(i,b[j]+1,b[j+1]) {
			if (a[i]!=-1) {
				v.emplace_back(a[i]);
				tot++;	
			}
		}
		
		size=n/b[j+1];
		fo(i,1,b[j+1]) c[i]=0;
		
		for (auto i:v) {
			if (i%size==0) c[i/size]++;
			else c[i/size+1]++;
		}
		
		fo(i,1,b[j+1]) if (c[i]>1) ans=0;
		
		ll z=0;
		fo(i,1,b[j+1]) {
			if (i&1) {
				if (c[i] && c[i+1]) z++;
			}
		}
		
		ans=ans*f[b[j]-tot]%mo*b[ b[j]-(tot+res-z)]%mo;
		res+=tot;
		tot=0;
	}
	
	fo(i,1,n) {
		if (i&1) {
			if (d[i]>n/2 && d[i+1]>n/2) ans=0;
		}
	}
	
	printf("%lld",ans);
    return 0;
}

 
 

标签:Educational,Rated,ll,Codeforces,tot,fo,ans,include,define
From: https://www.cnblogs.com/ganking/p/17778486.html

相关文章

  • Codeforces Round 863 (Div. 3) B. Conveyor Belts
    给一个\(n\timesn\)的矩阵,\(n\)是偶数。将矩阵按圈分割,同一圈的位置可以不消耗代价移动,可以消耗一个代价移动到相邻圈。给出\(n,x_1,y_1,x_2,y_2\),询问\((x_1,y_1)\)移动到\((x_2,y_2)\)的代价最小是多少。显然对每个圈可以选择左上角作为定点。显然直线\(......
  • Codeforces Round 865 (Div. 2) B. Grid Reconstruction
    给一个\(2\timesn\)的网格,且\(n\)是偶数。你需要将\(1\sim2\timesn\)填入这个网格。一条路径是从\((1,1)\)开始,每次只能向右或向下,到\((2,n)\)结束时,所经过的位置。按经过点的顺序标号,一两条路径的代价是\(cost=a_1-a_2+a_3-a_4+\cdots=\sum_{i=1......
  • Codeforces Round 902 (Div. 2, based on COMPFEST 15 - Final Round)
    \(D.EffectsofAntiPimples\)对每个数字能到达的所有位置先预处理最大值,那么就代表选择这个数字之后真实的贡献,那么对这样的预处理值,最小值显然只有一种做法,为\(2^0\),第二小的值应该可以与最小值一起选择,所以答案为\(2^1\),以此类推之后,每个值乘上对应的2的幂次之后求和即......
  • Codeforces Round 872 (Div. 2) B. LuoTianyi and the Table
    给一个\(n\timesm\)的矩阵和\(n\timesm\)个数,你需要把这些数填入矩阵。保证\[\sum_{i=1}^n\sum_{j=1}^m\left(\mathop{max}\limits_{1\leqx\leqi,1\leqy\leqj}a_{x,y}-\mathop{min}\limits_{1\leqx\leqi,1\leqy\leqj}a_{x,y}\right)......
  • Educational Codeforces Round 149 (Rated for Div. 2) C. Best Binary String
    给一个字符串\(s\)包含\(0,1,?\)。定义一个\(01\)串\(s\)的\(cost\)为:选择\(s\)的任意一个子段\([l,r]\)并\(reverse\)。将\(s\)变为一个非降序序列时的\(reverse\)最小次数即\(cost\)。你可以让\(s\)的\(?\)换成\(0/1\),使新\(s\)的\(cost\)......
  • Educational Codeforces Round 150 (Rated for Div. 2) B. Keep it Beautiful
    数组\(a=[a_1,a_2,\cdots,a_n]\)被称为是美丽的,如果可以将\([1,x]\)段移到\([x+1,n]\)段后面,\(x\geq0\),数组可以构成非降序。现在有一个数组\(a\)(一开始为空)和\(q\)个询问,第\(i\)个询问给一个正整数\(x_i\)。需要逐步执行以下操作。若\(x_i\)拼接......
  • Codeforces Round 884 (Div. 1 + Div. 2) B. Permutations & Primes
    给一个正整数\(n\),你需要构造一个\(n\)的排列\(p_1,p_2,\cdots,p_n\)。对于排列\(p\)的每个子段\([l,r]\),\(mex_{i=l}^{r}a_i\)的结果为质数的次数尽可能多。此处的\(mex\)最小排除值最低为\(1\)而非\(0\)。不难想到,小质数\(2,3\)容易构造。于是有......
  • Codeforces Round 882 (Div. 2) B. Hamon Odyssey
    给一个长为\(n\)的数组\(a_1,a_2,\cdots,a_n\)。定义\(f(l,r)=\&_{i=l}^{r}a_i\)。你需要对\(a\)进行分段,使得各段的\(f(l,r)\)之和最小。在各段\(f(l,r)\)之和最小的情况下,尽可能分出更多的段。输出满足上述条件下,\(a\)可分的段数。......
  • Codeforces Round 888 (Div. 3) C. Tiles Comeback
    有\(n\)块瓷砖和一个正整数\(k\),第\(i\)块瓷砖染色为\(c_i\)。一开始站在第\(1\)块瓷砖往,然后可以开始往右跳吗,到第\(n\)块瓷砖停止。你可以得到的路径长度\(p\)为你从\(1\)到\(n\)踩过瓷砖的数量。你需要确定是否存在一条长度为\(p\)的路径满足。\(k\mid......
  • Codeforces Round 893 (Div. 2) C. Yet Another Permutation Problem
    有一个\(gcd\)游戏,按以下步骤进行:选择一个\(n\)的排列\(p_1,p_2,\cdots,p_n\)。对于每个\(i\),\(d_i=gcd(p_i,p_{i\%n+1})\)排列\(p\)的\(score\)为数组\([d_1,d_2,\cdots,d_n]\)中不同数的个数。给一个\(n\),需要构造一个排列\(p\),使得\(sco......