zoukankan      html  css  js  c++  java
  • Codeforces Round #401 (Div. 2) D Cloud of Hashtags —— 字符串

    题目链接:http://codeforces.com/contest/777/problem/D


    题解:

    题意:给出n行字符串,对其进行字典序剪辑。我自己的想法是正向剪辑的,即先对第一第二个字符串进行剪辑,但是这样却不能保证前面的操作是正确的,当后面突然出现一个字典序很小的字符串,那么前面的操作将非法。这种方法错在不能预知正在操作的字符串的字典序限度。看了别人的代码,发现是反向进行剪辑的,即从倒数第一第二个字符串进行剪辑,直到第一个。因为倒数第一个的字典序必须是最大,所以倒数第二个的字典序限度已知,所以可直接对其操作,并能保证操作时合法的,即在字典序限度之内,以此类推,直到第一个字符串。其实这是一个贪心过程,每一步都是最优的。

     


    学习之处:

    1.由于字符串的长度不确定,即无法预知其大小,所以用传统的数组行不通。后来想到用string(之前只是有过了解,但没有用过),即解决了字符串长度的问题。string只能用cin和cout输入输出,string初始长度为0,如果要直接赋值,只能对长度之内的元素赋值。可直接+ 和 =。 输出时遇到不会停止输出,而是输出所有的元素。


     


    代码如下:

     1 #include<bits/stdc++.h>  
     2 using namespace std;  
     3   
     4 string a[500005],tmp;  
     5 int main()  
     6 {  
     7     int n;  
     8     scanf("%d",&n);  
     9   
    10     for(int i = 0; i<n; i++)  
    11         cin>>a[i];  
    12   
    13     for(int i = n-2; i>=0; i--)  
    14     {  
    15         int len = a[i].size();  
    16         tmp = "";  
    17         for(int j = 0; j<len; j++)  
    18         {  
    19             if(a[i][j]>a[i+1][j])  
    20             {  
    21                 a[i] = tmp;  
    22                 break;  
    23             }  
    24   
    25             else if(a[i][j]<a[i+1][j])  
    26             {  
    27                 for(int k = j; k<len; k++) tmp += a[i][k];  
    28                 a[i] = tmp;  
    29                 break;  
    30             }  
    31             else if(a[i][j]==a[i+1][j]) tmp += a[i][j];  
    32         }  
    33     }  
    34   
    35     for(int i = 0; i<n; i++)  
    36         cout<<a[i]<<endl;  
    37 }  
    View Code

     

  • 相关阅读:
    28完全背包+扩展欧几里得(包子凑数)
    HDU 3527 SPY
    POJ 3615 Cow Hurdles
    POJ 3620 Avoid The Lakes
    POJ 3036 Honeycomb Walk
    HDU 2352 Verdis Quo
    HDU 2368 Alfredo's Pizza Restaurant
    HDU 2700 Parity
    HDU 3763 CDs
    POJ 3279 Fliptile
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/7538769.html
Copyright © 2011-2022 走看看