zoukankan      html  css  js  c++  java
  • CF1172A Nauuo and Cards 贪心

    我们发现,如果我们打数字牌后,就不能打 0 了.  

    分两种情况讨论即可. 

    code: 

    #include <bits/stdc++.h>  
    #define N 200008 
    #define ll long long  
    #define setIO(s) freopen(s".in","r",stdin) 
    using namespace std;  
    int n;  
    int a[N],b[N];  
    set<int>se;     
    set<int>::iterator it;  
    int check() 
    {  
    	int i,j,flag=0,cur,tp=1;       
    	if(!b[n]) return 0;     
    	for(i=n-1;i>=0;--i)  
    		if(!b[i]||(b[i]!=b[i+1]-1)) 
    		{
    			if(b[i+1]!=1)  
    				flag=1;  
    			break;  
    		}   
    	if(flag)   
    		return 0;    
    	if(b[n]==n)    
    	{
    		printf("0
    ");    
    		return 1;  
    	}                       
    	cur=b[n]+1;  
    	for(i=1;i<=n;++i)  
    		if(a[i]) se.insert(a[i]);          
    	while(cur<=n) 
    	{
    		if(se.empty()) 
    			return 0;    
    		it=se.begin();   
    		if(*it==cur)   
    		{
    			se.erase(it);   
    			++cur; 
    			if(b[tp])se.insert(b[tp]);     
    			++tp;  
    		}
    		else return 0;   
    	}   
    	printf("%d
    ",n-b[n]);     
    	return 1;   
    }
    int main() 
    { 
    	// setIO("input"); 
    	int i,j;              
    	scanf("%d",&n);  
    	for(i=1;i<=n;++i)
    		scanf("%d",&a[i]);  
    	for(i=1;i<=n;++i) 
    		scanf("%d",&b[i]);    
    	if(!check())         
    	{    
    		int MAX=0;   
    		for(i=1;i<=n;++i)                 
    			if(b[i]) MAX=max(MAX,i-b[i]+1);   
    		printf("%d
    ",MAX+n);   
    	}   
    	return 0;  
    }
    

      

  • 相关阅读:
    javascript中的预编译问题
    五环
    两列布局
    定位以及z-index
    [vijos1234]口袋的天空<最小生成树>
    [讲解]prim算法<最小生成树>
    [noip模拟]B<构造>
    [JZOJ5343]健美猫<模拟>
    [noip模拟]心<并查集>
    [noip模拟]种花<快速幂+结论>
  • 原文地址:https://www.cnblogs.com/guangheli/p/12416551.html
Copyright © 2011-2022 走看看