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

Codeforces Round 887 (Div. 2)

时间:2023-11-11 09:57:15浏览次数:36  
标签:now 887 puts int Codeforces ans Div include define

https://codeforces.com/contest/1853
C题感觉很不好写的样子,首先通过打表发现最后答案每次都是+n,那么我们考虑前i个,假如当前的ans+i仍然小于a[i+1],则没有影响,我们依然可以直接往后跳,否则,我们越过了a[i+1],那么我们应当加上i+1,注意,这有可能会导致往后面继续跳,
比如1 3 5 6 7,我们跳到4之后,4+2>5,所以应当+3,4+3>6,应当+4,4+4>7,应当+5,4+5=9,结束。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<vector>
#include<set>
#include<queue>
#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))
#define lc (o<<1)
#define rc (o<<1|1)
using namespace std;
//typedef __int128 i128;
typedef double db;
typedef long long ll;
const ll mo=1e9+7;
const int inf=1<<30;
const int N=2e5+5;
ll n,k,a[N],ans,x;
int main()
{
//	freopen("data.in","r",stdin);
//	freopen("ans.out","w",stdout);
	
	int T;
	scanf("%d",&T);
	while (T--){
		scanf("%lld %lld",&n,&k);
		fo(i,1,n) scanf("%lld",&a[i]);
		
		if (a[1]!=1) {
			printf("%d\n",1);
			continue;
		}
		ans=1;
		
		int j=1;
		while (j<n){
			if (!k) break;
			x=(a[j+1]-ans)/j;
			if ((a[j+1]-ans)%j==0) x--;
			
			if (x<=k) {
				k-=x;
				ans+=x*j;
			}
			else {
				ans+=k*j;
				k=0;
			}
			
			if (k) {
				while (j<n && ans+j+1>=a[j+1]) {
					j++;
					if (j<n && ans+j<a[j+1]) break;
				}
				ans+=j;
				k--;
			}
		}
		
		if (k) ans+=n*k;
		printf("%lld\n",ans);
	}


	return 0;
} 

  
 

写了一坨答辩

D首先将a从大到小排序,首先非常显然,我们最后给他们安排的数一定是不增的,
对于当前的区间l,r发现只有当al'=now,或者ar‘=0时才有解,al’,ar‘,为减去前面已经确定的较大的正数的个数,递归处理即可。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<vector>
#include<set>
#include<queue>
#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))
#define lc (o<<1)
#define rc (o<<1|1)
using namespace std;
//typedef __int128 i128;
typedef double db;
typedef long long ll;
const ll mo=1e9+7;
const int inf=1<<30;
const int N=2e5+5;
struct node{
	int x,id;
};
node b[N];
int n,ans[N],flag; 
bool cmp(node a,node b){
	return a.x>b.x;
}
void solve(int l,int r,int now,int p){
	if (l>r) return;

	if (b[l].x-p==now) {
		ans[b[l].id]=now;
		solve(l+1,r,now-1,p+1);
	}
	else if (b[r].x-p==0){
		ans[b[r].id]=-now;
		solve(l,r-1,now-1,p);
	}
	else flag=0;
}
int main()
{
//	freopen("data.in","r",stdin);
//	freopen("ans.out","w",stdout);
	
	int T;
	scanf("%d",&T);
	while (T--){
		scanf("%d",&n);
		fo(i,1,n) {
			scanf("%d",&b[i].x);
			b[i].id=i;
		}
		sort(b+1,b+n+1,cmp);
		
		flag=1;
		solve(1,n,n,0);
		if (!flag) {
			B; continue;
		}
		
		A;
		fo(i,1,n) printf("%d ",ans[i]);
		printf("\n");
	}


	return 0;
} 

  
 

标签:now,887,puts,int,Codeforces,ans,Div,include,define
From: https://www.cnblogs.com/ganking/p/17825536.html

相关文章

  • 修改div中的内容
    在日常的开发中,我们会需要获取或者修改html元素内容。那么什么方法可以让我们做到这一需求呢,今天我就为大家讲解一下修改div中内容的方法。<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> </head> <body> <divid="box"><......
  • Codeforces Round 903 (Div. 3) ABCDE
    CodeforcesRound903(Div.3)ABCDEA.Don'tTrytoCount题意:复制\(s\)串若干遍,是否能在\(s\)串中找到\(t\)串。思路:直接暴力,注意不要超限,会MLE//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9+......
  • Educational Codeforces Round 157 D
    tilian不太会这种题发现找到一个数就能确定整个序列然后转而发现前缀异或和b1^b2=a1b1^b3=a2...我们发现要是n为偶数时能直接求出b1从而确定整个序列而为奇数时我们无法确定b1我们思考拆位之后如果b1该位为0算出真实的异或后的01个数b1该位为1算出真实的......
  • Codeforces Round 908 (Div. 2)
    比赛链接A.SecretSport题解O(1*T)对于一场比赛,结束前谁最后赢就是谁赢#include<bits/stdc++.h>usingnamespacestd;strings;voidsolve(){intn;cin>>n>>s;cout<<s[n-1]<<endl;}intmain(){intT;cin>>T......
  • CodeForces 852C Property
    洛谷传送门CF传送门NOIP模拟赛T1,小清新几何题。要让选出的点组成的多边形面积最大,就要让正多边形的面积减去选出的点组成的多边形面积最小。而这个面积差可以表示成\(2n\)个三角形的面积,即\(\sum\limits_{i=0}^{2n-1}S_{\triangleA_iA_{(i+1)\bmodn}B_{(i+......
  • Educational Codeforces Round 126 (Rated for Div. 2)
    https://codeforces.com/contest/1661/B题数据很小,直接bfs预处理就行C题随便猜了一下,设mx=\(max\{a_i\}\)最后的值应该是mx,mx+1,mx+2,mx+3之类的吧D题刚开始从前面考虑,陷入僵局,一度非常的困,学习凯库勒睡了一会,就突然想到了,前面不行,就从后面考虑,可以发现,从后面考虑的话,就非常......
  • 11月9月字体的属性2以及div模块的另一种用法
    目录字体的属性2文字对齐文字的装饰首行缩进文字的距离设置块级标签的另一个作用字体的属性2文字对齐、文字装饰、首行缩进、文字之间的距离文字对齐需要用到属性text-align,该属性是用于规定元素中的文本水平对齐方式。然后就是text-align的属性值:值描述left左边......
  • cf908(div2)题解(补题)
    纪念这次div2让我上绿名,但还是有点遗憾,差一点就可以过三题超神了比赛链接cf908div2A这题是个骗人题,整个比赛会停下来就是一个人赢够了回合数,那么在谁这停下来就是谁赢了整个比赛,不用管每回合赢得规则。#include<iostream>usingnamespacestd;#include<string>intmain(){......
  • Codeforces Round 908 (Div. 2)
    A.SecretSport题意:A与B选手在下棋,规定下赢X把看作赢一局,一共赢Y把的那个是最后的赢家。思路:因为不知道x,y到底是多少,n的范围是到20,所以只需要枚举x即可,时间复杂度不高,注意的是,如果枚举结果是A赢,那么给定字符串的最后一个值一定是A,反之也是。#include<bits/stdc++.h>usingnam......
  • 相对熵/KL散度(Kullback–Leibler divergence,KLD)
    相对熵(relativeentropy)又称为KL散度(Kullback–Leiblerdivergence,简称KLD),信息散度(informationdivergence),信息增益(informationgain)。KL散度是两个概率分布P和Q差别的非对称性的度量。     KL散度是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的比特个......