zoukankan      html  css  js  c++  java
  • Codeforces Round #555 div3 C2

    题目大意

    给出一个序列,可以从左或从右侧取数,要求取出的序列严格上升

    思路

    贪心取左右最小的,如果相等则之后只能从一侧取,直接选能取最长的一侧

    Code:

     #include<bits/stdc++.h> 
    
    #define ll long long 
    
    #define inf 0x3f3f3f3f
    using namespace std; 
    
    int ma[10];
    int n;
    int a[(int)(2*1e5)+10];
    
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i){
    		scanf("%d",&a[i]);
    	}
    	int cmin = 0;
    	int l = 1,r=n;
    	vector<int> ans;
    	while(l<=r && cmin<max(a[l],a[r])){
    		if(a[l]==a[r]){
    			if(r-l<3){
    				ans.push_back(0);
    				cmin = a[l++];
    			}
    			else{
    				int cntl=0,cntr=0;
    				int ind = l+1;
    				while(a[ind]>a[ind-1]) cntl++,ind++;	//左边可取的长度
    				ind = r-1;
    				while(a[ind]>a[ind+1]) cntr++,ind--;	//右边可取的长度
    				if(cntl>cntr){
    					ans.push_back(0);
    					cmin = a[l++];
    				}else{
    					ans.push_back(1);
    					cmin = a[r--];
    				}
    			}
    			continue;
    		} 
    		// cmin<a[l]<a[r] 或 a[r] < cmin < a[l]
    		if((a[l]<a[r] && cmin<a[l] )|| cmin>=a[r]){
    			ans.push_back(0);
    			cmin = a[l++];
    		}else{	// cmin < a[r] < a[l] 或 a[l] < cmin < a[r]
     			ans.push_back(1);
    			cmin = a[r--];
    		}
    	}
    	printf("%d
    ",ans.size());
    	for(int i:ans){
    		if(i==0)printf("L");
    		else printf("R");
    	}
    	printf("
    ");
    	return 0;
    }
    } 
    
    
  • 相关阅读:
    在线图片压缩
    wiki-editor语法
    Android 4.0.4模拟器安装完全教程(图文)
    Javascript中的void
    守护进程
    jQuery编程的最佳实践
    JavaScript内存优化
    vim编程技巧
    MySQL表的四种分区类型
    SQL中的where条件,在数据库中提取与应用浅析
  • 原文地址:https://www.cnblogs.com/xxrlz/p/10777436.html
Copyright © 2011-2022 走看看