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

Educational Codeforces Round 119

时间:2023-08-27 22:55:20浏览次数:38  
标签:Educational int db Codeforces define printf include 119 fo

今天只有3题,有点遗憾,D题几乎一眼切,但是时间不够,分类讨论没写完,vp结束几分钟后写出来。

A题开始还以为要并查集,后面发现只有一个N不行
B题漏写括号WA一发

C题感觉不好写啊,因为直接计算可能会爆,所以要先从后往前,确定边界,然后就是跟普通的填数差不多,二分一下。
又是找串,还得特别小心会不会爆,真的有点烦,但好在一次AC

#include<algorithm>
#include<cstdio>
#include<cstring>
#include<set>
#include<queue>
#include<cmath>
#include<unordered_map>
#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 lc (o<<1)
#define rc ((o<<1)|1)
#define A puts("YES")
#define B puts("NO")

using namespace std;
typedef double db;
typedef long long ll;
const int N=2e5+5;

char s[N];
ll n,a[N],tot,k,x,ans[N],t,b[N];
void work(ll x,ll &y){
	ll l,r,mid;
	
	l=0; r=a[x]*k+1; 
	while (l<r){
		mid=(l+r)>>1;
		if ((db)y/(db)(mid+1)<=(db)b[x+1]) r=mid;
		else l=mid+1;
	}
	
	y-=b[x+1]*l;
//	printf("%lld\n",l);
	ans[x]=l;
}
int main() {

//    freopen("data.in","r",stdin);
	int T;
	scanf("%d",&T);
	while (T--){
		memset(b,0,sizeof(b));
		memset(a,0,sizeof(a));
		memset(ans,0,sizeof(ans));
		
		tot=0;
		scanf("%lld %lld %lld",&n,&k,&x);
		scanf("%s",s+1);
		
		int z=0;
		fo(i,1,n) {
			if (s[i]=='*') z++;
			if (i==n || s[i+1]!='*') {
				if (z) a[++tot]=z;
				z=0;
			}
		}
		
//		fo(i,1,tot) printf("%lld ",a[i]);
//		return 0;
		
		int l=1;
	
		b[tot+1]=1;
		fd(i,tot,1) {
			if ((db)a[i]*(db)k+1 > (db)x/(db)b[i+1]) {
				l=i;
				break;
			}
			b[i]=b[i+1]*(a[i]*k+1);
		}
		
		fo(i,1,l-1) ans[i]=0;
		
		fo(i,l,tot){
			work(i, x);
		}
//		return 0

		
		int j=0;
		fo(i,1,n) {
			if (s[i]=='a') printf("%c",'a'); 
			else{
				if (i==1 || s[i-1]=='a') {
					j++;
					fo(p,1,ans[j]) printf("%c",'b');
				}
			}
		}
		printf("\n");

	}
	
	return 0;
}  

 

D题肯定是尽量用3,1,2的数量不超2,枚举一下,计算即可。

#include<algorithm>
#include<cstdio>
#include<cstring>
#include<set>
#include<queue>
#include<cmath>
#include<unordered_map>
#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 lc (o<<1)
#define rc ((o<<1)|1)
#define A puts("YES")
#define B puts("NO")

using namespace std;
typedef double db;
typedef long long ll;
const int N=2e5+5;

int a[N],n,ans,mx,z;
int main() {

//    freopen("data.in","r",stdin);
	int T;
	scanf("%d",&T);
	while (T--){
		scanf("%d",&n);
		fo(i,1,n) scanf("%d",&a[i]);
		
		
		ans=1e9;
		fo(p1,0,2) fo(p2,0,2) {

			mx=0;
			fo(i,1,n) {
				if (a[i]%3==0) {
					mx=max(mx, max(0, (a[i]-3*min(p1,p2))/3));
				}
				
				if (a[i]%3==1) {
					if (a[i]==1 && !p1) mx=1e9;
					if (p2!=2 && !p1) mx=1e9;
					
					if (p1) {
						mx=max(mx,(a[i]-1)/3);
					}
					if (p2==2) {
						mx=max(mx,(a[i]-4)/3);
					}
					if (p1==2 && p2) {
						mx=max(mx, (a[i]-4)/3);
					}
				}
				
				if (a[i]%3==2) {
					if (p1!=2 && !p2) mx=1e9;
					if (p1==2) mx=max(mx, (a[i]-2)/3);
					if (p2) mx=max(mx, (a[i]-2)/3);
					if (p2==2 && p1) mx=max(mx, max(0,(a[i]-5))/3);
				}
			}
			ans=min(ans,mx+p1+p2);

		}
		printf("%d\n",ans);
	}
	
	return 0;
}  

 

标签:Educational,int,db,Codeforces,define,printf,include,119,fo
From: https://www.cnblogs.com/ganking/p/17661049.html

相关文章

  • Codeforces Round 885 (Div. 2) F. Vika and Wiki(数学,倍增)
    题目链接:https://codeforces.com/problemset/problem/1848/F 大致题意:长度为n(n是2的幂次),每轮让a【i】=a【i】^a【i%n+1】,(^为异或)问需要操作多少次后可以使得每个数为0; 解题思路:我们来观察:第一次相当于:a【i】=a【i】^a【i+1】,a【i+1】=a【i+1】^a【i+2】第二次......
  • Educational Codeforces Round 152 (Rated for Div. 2)E. Max to the Right of Min(数
    题目链接:https://codeforces.com/problemset/problem/1849/E 大致题意: 长度为n的序列,求有多少个区间满足区间最大值在区间最小值的右边? 解题思路: (此题有使用线段树等其他做法,本处使用的是单调栈做法) 我们先求出每个a【i】的左边的比他小的LMIN,左边比他大的LMAX,右......
  • Codeforces Round 889 (Div. 1)C. Expected Destruction(期望,动态规划)
    题目链接:https://codeforces.com/problemset/problem/1854/C 大致题意: 有一个集合S,和一个上界m; 现在每秒钟可以进行一次如下操作: 1:等概率的选取S中的一个元素x;2:将x从S中移走;3:如果x+1不大于m并且x+1不在S中,那么添加x+1在S里面 问期望多少秒钟后可以使得S为空集(答......
  • Codeforces Round 889 (Div. 1) B. Earn or Unlock(dp,bitset)
    题目链接:https://codeforces.com/problemset/problem/1854/B 题目大致题意: 有n张卡牌从上到下堆叠,每张卡片有锁或不锁俩种状态,一开始第一张是不锁的;对最上面的卡牌,如果他是不锁的状态,那么可以进行俩种操作:1:从上到下,将v张被锁的卡牌解锁;2:获取v点能量现在求能获得的最大的......
  • Codeforces Round 890 (Div. 2) supported by Constructor Institute D. More Wrong(交
    题目链接:https://codeforces.com/contest/1856/problem/D 大致题意:这是一道交互题,有1~n的排列p,对于每次询问,你可以花费(R-L)2的代价去得到区间【L,R】之内的逆序对的个数,你需要在5n2的代价内得到n的位置。 初步思路: 首先我们来思路,在什么时候,我们可以确定那个位置是n。假......
  • Codeforces Round 894 (Div. 3)
    A.\(n\)个长为\(m\)的字符串,判断存在\(i,j,k,l\)有\(1\leqi<j<k<l\leqm\),满足这四列的字符串分别有\(v,i,k,a\)。小细节的题。时间复杂度\(O(n^2)\)。view#include<bits/stdc++.h>#defineREP(i,A,N)for(inti=(int)A;i<=(int)N;i+......
  • 【CFVP】Codeforces Round 851 (Div. 2)
    前言本场VP深感自己的弱小与史队的强大。又一次被史队全方位暴打。来做一个简要的总结。正文A.OneandTwoA题日常的愚蠢。考虑到原序列只含有质因子2。我们将质因子2平分给左右两边即可。当2的个数为奇数时即判断为无解。代码:#include<bits/stdc++.h>usingnamespace......
  • Codeforces Round 894 (Div. 3) ABCDEFG AK
    CodeforcesRound894(Div.3)第一次div3ak,虽然是vp的,后三题质量不错A-GiftCarpet穷举四个不同列即可,时间复杂度\(O(M^4)\)inta[100][100];voidsolve(){memset(a,0,sizeofa);intn,m;cin>>n>>m;for(inti=1;i<=n;i++)......
  • CodeForces 825G Tree Queries
    洛谷传送门CF传送门模拟赛赛时做法。看到查询路径点权最小值,想到建重构树,满足重构树上\(\operatorname{LCA}(x,y)\)为原树上\(x\toy\)路径的点权最小值。建树方法可以参考CF1797FLiHuaandPath。于是问题变成了,维护一个点集,支持加点,查询给定点\(x\)到点集中所有......
  • Codeforces Round 894 (Div. 3)
    CodeforcesRound894(Div.3)因为最近开学了,所以晚上可能就没有什么时间打这个了,不过以后一定会在第二天把题给补掉A题传送门A题意:就是在一个n*m的的字符矩阵中从左往右依次取出4列,使得每列包含vika这四个字符中按顺序出现一个。必须保证是按顺序出现。A思路:这是一个简......