• Codeforces Round #584 C


    题目地址:http://codeforces.com/contest/1209/problem/C

    题意:一个由由0~9组成的字符串,分别赋值1,2。按先后顺序先排1,再排2,实现不递减。

    思路:枚举0~9即可,要注意枚举的这个值可以同时为1和2,可用是否有在2数列的大于它来判断。

    一开始以为不递减就可以直接排1,2,一直W在样例一。。。后面又超时,定义的数组大小变为n+5之后就行了,有点懵。

    AC代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 typedef long long ll;
     6 int main(){
     7     int t;
     8     cin>>t;
     9     while(t--){
    10         int n,a[200005];
    11         cin>>n;
    12         char s;
    13         for(int i=0;i<n;i++){
    14             cin>>s;
    15             a[i]=s-'0';
    16         }
    17         bool flag=false;
    18         int j;
    19         int d[n+5]={0};
    20         for(j=0;j<10;j++){
    21             int b[n+5]={0},c[n+5]={0},num2=0,num1=0;
    22             for(int i=0;i<n;i++){
    23                 if(a[i]>j){
    24                     c[num2++]=a[i];
    25                     d[i]=2;
    26                 }
    27                 else if(a[i]<j){
    28                     b[num1++]=a[i];
    29                     d[i]=1;
    30                 }
    31                 else if(a[i]==j){
    32                     if(num2==0||j==c[num2-1]){
    33                         c[num2++]=j;
    34                         d[i]=2;
    35                     }
    36                     else{
    37                         b[num1++]=j;
    38                         d[i]=1;
    39                     }
    40                 }
    41             }
    42             bool pd=true;
    43             for(int i=1;i<num1;i++)
    44                 if(b[i]<b[i-1]){
    45                     pd=false;
    46                     break;
    47                 }
    48             for(int i=1;i<num2;i++)
    49                 if(c[i]<c[i-1]){
    50                     pd=false;
    51                     break;
    52                 }
    53             if(pd){
    54                 flag=true;
    55                 break;
    56             }
    57         }
    58         if(flag){
    59             for(int i=0;i<n;i++)
    60                 cout<<d[i];
    61             cout<<endl;
    62         }
    63         else cout<<"-"<<endl;
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    88. Merge Sorted Array
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    83. Remove Duplicates from Sorted List
    82. Remove Duplicates from Sorted List II
    81. Search in Rotated Sorted Array II
    80. Remove Duplicates from Sorted Array II
    计算几何——点线关系(叉积)poj2318
  • 原文地址:https://www.cnblogs.com/xunzf0402/p/11552539.html
Copyright © 2020-2023  润新知