Codeforces Round 887 (Div. 2)

A
B
转换枚举对象,然后根据长度以及正负来判断正确性与否

C题意:每一天删除第a1、a2大的数字,然后问第k天后,最小的数字是谁
读了题目的第一眼感觉需要用一个数据结构来存储,但是仔细思考观察这个题目,
这个题目非常有教育意义:以后做题目,如果上来没有思路,先自己上来模拟上20-30个数据看看有什么规律,不要没有思考的方向,这个不模拟这么多数据,根本就是发现不了规律
首先看这个图片:Codeforces Round 887 (Div. 2)_第1张图片
这个数小的时候发现不了规律,当数字大的时候我们就能发现一条非常吓人的规律,每个数字的增长是都是一样的,都是加上一个相同的数字,都是加五
解释一下这个代码:ans是指每一天结束后当前序列的最小值,所以ans初始化为1,意思就是说,第零天之后这个序列的最小值是1,
ans也可以理解为和自己位置下标的差值,刚开始的序列,即没有删除任何东西的序列,每个数字和自己所处的位置下标的间距之差是0,删除了一个数字之后,每个数字和自己的下标相差为1,这时候如果大于1,所以这个点又被删除了,我们需要更新一下值,如果超过了n个数字,规律就是+n-1

#include 
using namespace std;
typedef long long ll;
const int  N = 200010;
int a[N];
int main(){
	int t;
	cin>>t;
	while(t--){
		int n,k;
		cin>>n>>k;
		for(int i=1;i<=n;++i) cin>>a[i];
		ll ans = 1;
		int pos = 0;
		for(int i=0;i

你可能感兴趣的:(算法)