首页 > 其他分享 >Educational Codeforces Round 107

Educational Codeforces Round 107

时间:2023-09-18 20:22:17浏览次数:55  
标签:Educational int Codeforces len 50 dfs include 107 fo

依然是四题,但是感觉太久没打,好像变得迟钝了。
B题大概就是令

\[c={10}^k, a=c*3^k, b=c*2^k \]

C的话直接暴力维护每种颜色的第一个位置就行,反正只有50个

D的话刚开始没什么想法,构造题什么的真的不会啊

打表之后发现,对于k,在cost为0的情况下,最多能造出长度为\(k^2+1\)的串,也就是能够让每一种关系都出现一次,那么后面的话,我们每次选一个关系出现次数最小的就行,迷迷糊糊地过了。

#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#define fo(i,a,b) for (int (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))
#define A puts("YES")
using namespace std;
typedef long long ll;
const int N=3e5+5;
int n,q;
int t,x,sum,k,ans,len;
int h[50][50];

char a[N];
int b[N];
bool flag;
void dfs(int x){
	if (flag) return;
	if (x>len){
		flag=1;
		fo(i,1,n) b[i]=a[i]-'a'; 
		return;
	}
	
	fo(i,1,k){
		a[x]='a'+i-1;
		
		int z=0;
		fo(j,1,x-2) {
			if (a[j]==a[x-1] && a[j+1]==a[x]) z++;
		}
		
		if (z) continue;
		dfs(x+1);
	}
}
int main(){
	
//	freopen("data.in","r",stdin);
	scanf("%d %d",&n,&k);
	
	len=k*k+1;
	dfs(1);
	
	if (n<=len) {
		fo(i,1,n) printf("%c",b[i]+'a');
		return 0;
	}
	
	fo(i,1,len) printf("%c",b[i]+'a');
	fo(i,1,len-1) {
		h[b[i]][b[i+1]]=1;
	}
	
	int id,mn;
	fo(i,len+1,n) {
		
		mn=n;
		fo(j,0,k-1) {
			if (h[b[i-1]][j]<mn){
				mn=h[b[i-1]][j];
				id=j;
			}
		}
		
		b[i]=id;
		h[b[i-1]][id]++;
		
	}
	
	fo(i,len+1,n) printf("%c",b[i]+'a');
	
	return 0;
	
}

 
 

标签:Educational,int,Codeforces,len,50,dfs,include,107,fo
From: https://www.cnblogs.com/ganking/p/17712975.html

相关文章

  • Codeforces Round 897 (Div. 2) A-E
    A.green_gold_dog,arrayandpermutation题意:给出一个长为\(n\)的数组\(a\),找到一个长为\(n\)的排列\(b\),使得\(a\)与\(b\)对应位置上的元素的差尽可能大Solution将数组\(a\)排序,然后令排列\(n,n-1,...,2,1\)对应到对应的元素即可structnode{intx,id;boolope......
  • CodeForces 1863G Swaps
    洛谷传送门CF传送门看到\(a_{a_i}\)和\(a_i\in[1,n]\),果断连边\(i\toa_i\),得到内向基环森林。那么每次相当于把\(a_i\)变成自环,连边\(i\toa_{a_i}\)。但是每次操作都改变图的形态很不好办,考虑打标记。每次\(\operatorname{swap}(a_i,a_{a_i})\),我们就把\(i......
  • Codeforces Global Round 17 A. Anti Light's Cell Guessing
    给一个\(n\timesm\)的网格,里面藏了一个炸弹\((x_0,y_0)\)。你可以选择\(k\)个坐标\((x_1,y_1),(x_2,y_2),\cdots,(x_k,y_k)\)。第\(i\)次选择计算机会回复你一个数\(d_i=|x_0-x_i|+|y_0-y_i|\)。至少需要选出多少个坐标才能确定\((x_0,y_0)\)的位......
  • Codeforces Round 764 (Div. 3) B. Make AP
    有三个正整数\(a,b,c\)。需要执行以下操作严格一次:选择任意一个正整数\(m\)并让严格一个\(a,b,c\)之一乘以\(m\)。但不能改变他们的顺序。回答是否可以经过一次操作后使\(a,b,c\)变为等差。分类讨论题:三种情况满足一种即可。(已知\(a,b,c\geq1\))\(ma......
  • Codeforces Round 773 (Div. 2) B. Power Walking
    有\(n\)个增幅道具,第\(i\)个道具种类为\(a_i\),一个人的强度\(w\)为他所有道具的种类数。对于\(k]\in[1,n]\),询问将\(n\)个道具分配给\(k\)个人且每个人至少分配到一个道具后,能够得到的最想强度和\(\sum_{i=1}^{n}w_i\)。观察一:最低强度和\(\sum_{i=1}^{k}w......
  • Educational Codeforces Round 100
    B.FindTheArray对于条件二来说,1是万金油的存在,所以我们只需要把奇数位置或偶数位置全部变成1即可。因为要求差值小于\(\fracs2\),所以我可以求出奇偶位的和修改较小值即可。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingpii=pair<in......
  • codeforces图论合集
    CyclicOperations给定一个数组$a$,每次构造一个数组$\spacel\space$长度为$\spacek\space$,数组$\spacea\space$与$\spacel\space$转换关系如下:$a_{l_1}\tol_2\space,\spacea_{l_2}\tol_3\space,\spacea_{l_3}\tol_4\space,\space...\space,\spacea_{l_n}\tol_1$......
  • Codeforces Round 897 (Div. 2) 考试总结
    前言这次打得很好,相较于div3的脑残题和签到题来说,div2的思维难度更加的大。同时还有除传统题外,其他的题型出现。比如交互题等。这次能在考场上想出三道较于之前是有很大的进步的。赛时实况:ABCDE1E2F√√√××××赛后改题情况:ABCDE1E2F......
  • Codeforces 1868C/1869E Travel Plan 题解 | 巧妙思路与 dp
    题目链接:TravelPlan题目大意:\(n\)个点的完全二叉树,每个点可以分配\(1\simm\)的点权,定义路径价值为路径中最大的点权,求所有路径的价值和。对于任意长度(这里主要指包括几个节点)的路径\(t\),最大点权不超过\(k\)的方案数有\(k^t\)个,因此最大点权恰好为\(k\)的方案数有......
  • Codeforces Round 781 (Div. 2) B. Array Cloning Technique
    给一个长度为\(n\)的数组\(a\)。开始只有一份所给\(a\)的副本。你可以做以下两种操作:选择任意一个副本并且克隆它,然后将会多出一个克隆副本。交换两个元素,他们属于任意两个副本(可能是同一个)。需要判断最小操作数,使有一个副本的所有元素相同。观察一:只需要在开始的副本......