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

时间:2019-11-11
本文章向大家介绍Codeforces Round #555 (Div. 3) C1,C2【补题】,主要包括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<<'\n';
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<<'\n';
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 */

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

 

原文地址:https://www.cnblogs.com/pengge666/p/11837937.html