zoukankan      html  css  js  c++  java
  • Codeforces Round #604 (Div. 2) A,B,C【D题待补】

     思路:直接暴力判断就OK了

     1 #include<bits/stdc++.h>
     2  
     3 using namespace std;
     4 #define int long long
     5  
     6 signed main(){
     7     int _;cin>>_;
     8     while(_--){
     9         string str;
    10         cin>>str;
    11         if(str.size()==1){
    12             if(str[0]!='?'){
    13                 cout<<str<<'
    ';
    14             }else{
    15                 printf("a
    ");
    16             }
    17             continue;
    18         }
    19         int flag=0;
    20         for(int i=0;i<str.size();i++){
    21             if(str[i]=='?'){
    22                 int temp1=0;int temp2=0;
    23                 if(i-1>=0){
    24                       if(str[i-1]=='a'){
    25                         temp1=1;
    26                       }else if(str[i-1]=='b'){
    27                         temp1=2;
    28                       }else if(str[i-1]=='c'){
    29                         temp1=3;
    30                       }else{
    31                         temp1=-1;
    32                       }
    33                     }
    34                     if(i+1<str.size()){
    35                   if(str[i+1]=='a'){
    36                     temp2=1;
    37                   }else if(str[i+1]=='b'){
    38                     temp2=2;
    39                   }else if(str[i+1]=='c'){
    40                     temp2=3;
    41                   }else{
    42                     temp2=-1;
    43                   }
    44                 }
    45                 if(temp1==-1&&temp2==-1){
    46                     str[i]='a';
    47                 }else if(temp1==temp2){
    48                     if(temp1==1){
    49                         str[i]='b';
    50                     }else if(temp1==2){
    51                         str[i]='a';
    52                     }else if(temp1==3){
    53                         str[i]='a';
    54                     }
    55                 }else{
    56                     map<int,int> vis;
    57                     vis[temp1]=1;
    58                     vis[temp2]=1;
    59                     int F=0;
    60                     for(int i=1;i<=3;i++){
    61                         if(!vis[i]){
    62                             F=i;
    63                             break;
    64                         }
    65                     }
    66                     if(F==1){
    67                         str[i]='a';
    68                     }else if(F==2){
    69                         str[i]='b';
    70                     }else if(F==3){
    71                         str[i]='c';
    72                     }
    73                 }
    74             }
    75         } 
    76         for (int i=0;i<str.size()-1;i++){
    77             if(str[i]==str[i+1]){
    78                 flag=1;
    79                 break;
    80             }
    81         }
    82         if(flag){
    83             cout<<"-1"<<'
    ';
    84             continue;
    85         }else{
    86             cout<<str<<'
    ';
    87         }
    88     }
    89     return 0;
    90 }

     思路:经过观察发现,排序后只要每个数对应的id是连续的就符合条件。

     1 #include<bits/stdc++.h>
     2 #include<queue>
     3 using namespace std;
     4 #define int long long
     5 #define N 1005000
     6 #define inf 0x3f3f3f3f3f3f
     7 struct str{
     8     int num;
     9     int id;
    10 }st[N];
    11 int ans[N];
    12 bool cmp(str a,str b){
    13     return a.num<b.num;
    14 }
    15 deque<int> q; // 维护最小值和最大值 
    16 signed main(){
    17     int _;
    18     cin>>_;
    19     while(_--){
    20         int n;
    21         cin>>n;
    22         ans[1]=1;
    23         ans[n]=1;
    24         for(int i=1;i<=n;i++){
    25             scanf("%lld",&st[i].num);
    26             st[i].id=i;            
    27         } 
    28         sort(st+1,st+1+n,cmp);
    29         /*
    30         for(int i=1;i<=n;i++){
    31             printf("%lld %lld
    ",st[i].num,st[i].id);
    32         }
    33         */
    34         int minx=inf;
    35         int maxn=(-1)*inf;
    36         minx=min(st[1].id,minx); 
    37         maxn=max(maxn,st[1].id);
    38         for(int i=2;i<n;i++){
    39                 minx=min(st[i].id,minx); 
    40                   maxn=max(maxn,st[i].id);
    41             int dis=0;
    42             dis=maxn-minx+1;
    43             if(i==dis){
    44                 ans[i]=1;
    45             }else{
    46                 ans[i]=0;
    47             }
    48         
    49         }
    50         for(int i=1;i<=n;i++) printf("%lld",ans[i]);
    51         printf("
    ");
    52         for(int i=0;i<=n+1;i++){
    53             ans[i]=0;
    54             st[i].id=0;st[i].num=0;
    55         }
    56     }
    57     return 0;
    58 } 
    59  

     思路:题目对于g有大小限制而s和b之间没有,则我们让g尽可能小就好了,即选解题数最高的那一组选手全部发金牌,然后发银牌,直到g>s,剩下的选手全部发铜牌,直到发的牌数恰好小于n/2即可,做不到则不可行。【模拟一下】

     1 #include<bits/stdc++.h>
     2  
     3 using namespace std;
     4 #define int long long 
     5 #define N 1050025
     6 #define inf 0x3f3f3f3f3f
     7 int arr[N];
     8 signed main(){
     9   int _;cin>>_;
    10   while(_--){
    11     int n;
    12     cin>>n;
    13     int g=0,s=0,b=0;
    14     for(int i=1;i<=n;i++){
    15        scanf("%lld",&arr[i]);
    16     }
    17     if(n<6){
    18             cout<<"0 0 0
    ";
    19       continue;
    20     }
    21     int maxn_sum=n/2;
    22     int avg=maxn_sum/3;
    23     int sum_g=1;int sum_s=1;int sum_b=1;
    24     int  now=1;
    25     for(int i=1;i<=n&&i<=maxn_sum;i++,now++){
    26       if(arr[i]==arr[i+1]){
    27         sum_g++;
    28       }else{
    29         break;
    30       }
    31     }
    32     g=sum_g;
    33     for(int i=now+1;i<=n&&i<=maxn_sum;i++,now++){
    34       if(sum_s<=sum_g){
    35         sum_s++;
    36       }else{
    37         if(arr[i]==arr[i+1]){
    38           sum_s++;
    39         }else{
    40           break;
    41         }
    42       }
    43     }
    44     s=sum_s;
    45     sum_b=maxn_sum-g-s;
    46     b=sum_b;
    47     if(sum_b<=g){
    48       printf("0 0 0
    ");
    49       continue;
    50     }
    51     if(arr[maxn_sum]==arr[maxn_sum+1]){
    52       for(int i=maxn_sum;i>=1;i--){
    53         if(arr[i]==arr[i-1]){
    54           b--;
    55         }else{
    56           b--;
    57           break;
    58         }
    59       }
    60     }
    61     if(b<=g||b<=0||s<=0||g<=0||s<=g){
    62       printf("0 0 0
    ");
    63       continue;
    64     }else{
    65       printf("%lld %lld %lld
    ",g,s,b);
    66     }
    67     
    68   }
    69   return 0;
    70 } 

    D题待补。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • 相关阅读:
    xPath用法
    http post 接口
    关于WSSE验证-- 一种验证用户的方法
    java资源文件解读
    dom4j读取xml
    docker安装mysql
    php.ini配置max_execution_time和FPM配置request_terminate_timeout
    《高德拉特约束理论》
    Python爬虫-播报天气信息(生成exe文件)待续
    pyhon-爬虫实战抓取豆瓣top250到mysql
  • 原文地址:https://www.cnblogs.com/pengge666/p/11997732.html
Copyright © 2011-2022 走看看