首页 > 其他分享 >Codeforces #564 (Div. 2) C. Nauuo and Cards[贪心]

Codeforces #564 (Div. 2) C. Nauuo and Cards[贪心]

时间:2023-05-31 10:02:33浏览次数:55  
标签:卡片 int max 564 Codeforces Nauuo 抽卡 编号 mx


题目链接:http://codeforces.com/contest/1173/problem/C

 

解题思路:

很明显总的抽卡次数是不会超过2*n的。然后我们再将情况分成两种:

1.编号1的卡片已经在里面了,并且最底部已经形成了一个1~x的连续的卡片,而且之后x+1,x+2都可以来得及补上,在这种情况下抽卡次数肯定就不会超过n了。

2.编号为1的卡片只能从外面重新再进来,这个时候很明显答案至少是n。然后我们再要判断最少要从顶部收取多少张卡片,我们假设一个编号为x的卡片现在在从上往下数的第i个位置,那么在1~x-1都能及时补上的情况下,x能及时补上必须要抽掉max(i-x+1,0)张顶部卡片,所以最后将这些答案取一个max就好了。

#include <bits/stdc++.h>
using namespace std;
const int mx = 2e5 + 10;
int n,p[mx],b[mx];
int main(){
	scanf("%d",&n);
	int u;
	for(int i=1;i<=n;i++) scanf("%d",&u);
	for(int i=1;i<=n;i++){
		scanf("%d",b+i);
		p[b[i]] = i;
	} 
	if(p[1]){
		int i = p[1],j;
		for(j=1;j+i<=n;j++)
		if(b[j+i]!=j+1) break;
		if(j+i==n+1){
			for(i=j+1;i<=n&&p[i]<i-j;i++);
			if(i==n+1) return 0*printf("%d\n",p[1]-1);
		}
	}
	int ans = 0;
	for(int i=1;i<=n;i++) ans = max(ans,p[i]-(i-1));
	printf("%d\n",ans+n);
	return 0;
}

 

标签:卡片,int,max,564,Codeforces,Nauuo,抽卡,编号,mx
From: https://blog.51cto.com/u_12468613/6384519

相关文章

  • Codeforces #564 (Div. 2) D. Nauuo and Circle[树形DP]
    题目链接:http://codeforces.com/contest/1173/problem/D 解题思路:首先得知道按照圆周顺序的话,那么一颗子树必须存放在连续的一段区间里面,现在我们假设根节点是1,那么一颗为u做根节点的子树他的方案数就是各个儿子的方案数的乘积最后再乘以儿子个数+1(u节点本身)的排列方案数。所......
  • Educational Codeforces Round 149 (Rated for Div. 2)
    A.GrasshopperonaLine#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){intx,k;cin>>x>>k;if(x%k==0){cout<<"2\n"<<x-1<<"&......
  • Codeforces Round 875 (Div. 2) A-D
    A.TwinPermutations题意:给出一个由[1,2,...,n]组成的数组a,构造另一个由[1,2,...,n]组成的数组b,使得a[1]+b[1]<=a[2]+b[2]<=...<=a[n]+b[n]Solution可以想到只要让他们全为n+1就行了,这样是一定有解的voidsolve(){ intn;cin>>n; for(inti=1;i<=n;i++) { cin>>a[i]; ......
  • hdu 3564(线段树+LIS)
    题意:给出1~n的插入顺序,要求每次插入之后的LIS解题思路:这道题确实挺难想的,我最开始想用树状数组每插入一个数就更新一次,如果这么想,那么你就输了。它这里的想法是先将1-n的最终位置都保存起来,然后再一个个去找LIS。这里有点离线算法的意思,至少了解到更新时可以先别急着处理。还有这里......
  • Codeforces Round 875 (Div
    CodeforcesRound875(Div.2)C-D题解CProblem-C-Codeforces我们发现题述所形成的父亲节点一定比子节点先画出,并且如果子节点顺序在父节点后面,则父,子节点为同一个周期加入。反之,则子节点的周期为父节点+1。所以做法考虑树上dp,维护第i个节点加入树的周期。转移方程如下:\[......
  • Codeforces Round 875 (Div. 2)
    Preface难得现场打一次,这天下午打了三个半小时的校内赛,然后八点打了两小时ARC,最后再接上两个半小时的CF真是爽歪歪不过有一说一其实很多时候都在坐牢,这场CF也差不多,一个小时写完ABCD然后开始坐牢,其实E基本想出来了但是没想到用随机赋值的方法来实现不过由于这场手很稳因此排名......
  • Codeforces Round 874 (Div. 3)
    A.MusicalPuzzle#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn;strings;cin>>n>>s;set<string>cnt;for(inti=0;i+1<n;i++)cnt.insert(s.substr(i,2));......
  • Codeforces Round 875 (Div. 2) A-D
    CodeforcesRound875(Div.2)A.TwinPermutationsinta[N];voidsolve(){intn=read();for(inti=1;i<=n;i++)a[i]=read();for(inti=1;i<=n;i++)cout<<n+1-a[i]<<'';cout<<'\n';//puts(ans&g......
  • CodeForces 1830C Hyperregular Bracket Strings
    洛谷传送门CF传送门每一步思路都非常自然的题。考虑先从一些简单的case入手。1.\(k=0\)设\(g_i\)为长度为\(i\)的合法括号串数。显然\(\foralli\nmid2,g_i=0\)。对于偶数的\(i\),这是一个经典问题,\(g_i\)就是第\(\frac{i}{2}\)项卡特兰数,因此\(g_i=\bi......
  • Codeforces Round #875 (Div. 2)
    CodeforcesRound#875(Div.2)bilibili:CodeforcesRound#875(Div.2)实况|完成度[4.01/6]A#include<bits/stdc++.h>usingll=longlong;usinguint=unsigned;usingnamespacestd;intTestCase;signedmain(){ for(scanf("%d",&......