2022/5/22 CF比赛总结

比赛链接:此处

CodeForces比赛(×)
看样例找规律(√)
盲猜能力评测(√)
视力检测(√)

A.String Building

  • 不是我做的;

B.Consecutive Points Segment

  • 题意就是对每个数至多进行一次 \(+1/-1\) 的操作,将数列变成连续不断的递增数列;
  • 首先目测一下样例,我们可以猜测:结论和相邻两数的的差有关。
    显然的,1 4 这样的可以,而 1 5 不行(至多变成 2 4),说明相邻两数的差不能大于 \(3\)
    同样显而易见地可以发现,这个差的关系是具有传递性的(1 3 6 至多变成 2 3 5),所以这说明整个数列的最大值与最小值之差不能超过其长度 \(+2\)
AC code
#include<bits/stdc++.h>
using namespace std;

inline int read(){
	int s=0,f=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		s=s*10+int(ch-'0');
		ch=getchar();
	}
	return s*f;
}

const int N=2e5+10;

int t;
int n;
int a[N];

int main(){
	t=read();
	while(t--){
		n=read();
		int cnt=0;
		for(int i=1;i<=n;++i){
			a[i]=read();
			if(i>1) cnt+=a[i]-a[i-1]-1;
		}
		if(cnt>2) puts("NO");
		else puts("YES");
	}
	return 0;
} 

C.Dolce Vita

  • 首先由贪心的思想得到,如果要买尽可能多的糖果,那么从价格低的开始买一定是最优的;
  • 由于后来的每天所有糖果的价格都会上涨,所以不同糖果之间的相对大小关系不会变;
  • 首先 \(sort\) 一下,然后从前往后扫到第 \(0\) 天时可以选的价格最大的糖果处(即前面的和 \(\le x\) 的最后一个),先把第 \(0\) 天计算了。
    然后判断 \(sum\)\(x\) 的差,如果这个值是现在每天选择的糖果数量的 \(k\) 倍及以上,说明还可以保持 \(k\) 天这种组合,
posted @ 2022-05-22 17:35  Star_LIcsAy  阅读(35)  评论(0)    收藏  举报