• Codeforces Round #555 (Div. 3) C1,C2【补题】


     D1:思路:L,R指针移动,每次选最小的即可。 

     1 #include<bits/stdc++.h>
     2  
     3 using namespace std;
     4 #define int long long
     5 #define N 200009
     6 int arr[N]; 
     7 int ans[N];
     8 signed main(){
     9     int n;
    10     cin>>n;
    11     for(int i=1;i<=n;i++){
    12         cin>>arr[i];
    13     }
    14     int l=1,r=n;
    15     int cnt=0;
    16     int now=0;
    17     while(1){
    18         if(now<arr[l]&&now<arr[r]){
    19             if(arr[l]<arr[r]){
    20             
    21                 ans[++cnt]=0;
    22                 now=arr[l];    
    23                 l++;
    24             }else{
    25                 
    26                 ans[++cnt]=1;
    27                 now=arr[r];
    28                 r--;
    29             }
    30         }else if(now<arr[l]){
    31                 
    32                 ans[++cnt]=0;
    33                 now=arr[l];l++;
    34         }else if(now<arr[r]){
    35                 
    36                 ans[++cnt]=1;
    37                 now=arr[r];r--;
    38         }else{
    39             break;
    40         }    
    41     }
    42     cout<<cnt<<'
    ';
    43     for(int i=1;i<=cnt;i++){
    44         if(ans[i])
    45             cout<<"R";
    46         else
    47             cout<<"L";
    48         
    49     }
    50     return 0;
    51 }

     D1:思路:L,R指针移动,每次选最小的即可。【注意:特判左右两个数相等即可】

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 #define int long long
     5 #define N 200009
     6 int arr[N]; 
     7 int ans[N];
     8 signed main(){
     9     int n;
    10     cin>>n;
    11     for(int i=1;i<=n;i++)    cin>>arr[i];
    12     int l=1,r=n;
    13     int cnt=0;
    14     int now=0;
    15     while(1){
    16         if(arr[l]==arr[r]&&l<r&&arr[l]>now){
    17             //cout<<"==";
    18             int temp;
    19             temp=l;
    20             int sum1=1;
    21             while(arr[temp]<arr[temp+1]&&(temp+1)<r){
    22                 temp++;
    23                 sum1++;
    24             }
    25             temp=r;
    26             int sum2=1;
    27             while(arr[temp]<arr[temp-1]&&(temp-1)>l){
    28                 temp--;
    29                 sum2++;
    30             }
    31             if(sum1>sum2){
    32                 ans[++cnt]=0;
    33                 now=arr[l];    
    34                 l++;
    35             }else{
    36                 ans[++cnt]=1;
    37                 now=arr[r];
    38                 r--;    
    39             }
    40         }else if(now<arr[l]&&now<arr[r]){
    41             if(arr[l]<arr[r]){
    42                 ans[++cnt]=0;
    43                 now=arr[l];    
    44                 l++;
    45             }else{
    46                 ans[++cnt]=1;
    47                 now=arr[r];
    48                 r--;
    49             }
    50         }else if(now<arr[l]){
    51                 
    52                 ans[++cnt]=0;
    53                 now=arr[l];l++;
    54         }else if(now<arr[r]){
    55                 
    56                 ans[++cnt]=1;
    57                 now=arr[r];r--;
    58         }else{
    59             break;
    60         }    
    61     }
    62     cout<<cnt<<'
    ';
    63     for(int i=1;i<=cnt;i++){
    64         if(ans[i])
    65             cout<<"R";
    66         else
    67             cout<<"L";
    68     }
    69     return 0;
    70 }
    71 
    72 /*
    73 1 3 5 4 2 1
    74 15
    75 37504 79054 80071 95721 135743 164345 189260 190810 191657 196168 200000 200000 190810 190018 185437
    76 */

    左右两端数都小于等于构造的数组的最后一个数字

     

  • 相关阅读:
    笨办法41学会说面向对象【我有新书啦!!!
    pip安装及使用
    Office相关
    python各种学习链接
    3000问
    python2代码批量转python3
    啊——回来了_(:з」∠)_
    停更!
    win10 adb(Android Debug Bridge)导出日志
    docker镜像管理基础操作
  • 原文地址:https://www.cnblogs.com/pengge666/p/11837937.html
Copyright © 2020-2023  润新知