Codeforces Round #401 (Div. 2) D Cloud of Hashtags —— 串
2017-03-17 14:25
302 查看
题目链接:http://codeforces.com/contest/777/problem/D
题解:
题意:给出n行字符串,对其进行字典序剪辑。我自己的想法是正向剪辑的,即先对第一第二个字符串进行剪辑,但是这样却不能保证前面的操作是正确的,当后面突然出现一个字典序很小的字符串,那么前面的操作将非法。这种方法错在不能预知正在操作的字符串的字典序限度。看了别人的代码,发现是反向进行剪辑的,即从倒数第一第二个字符串进行剪辑,直到第一个。因为倒数第一个的字典序必须是最大,所以倒数第二个的字典序限度已知,所以可直接对其操作,并能保证操作时合法的,即在字典序限度之内,以此类推,直到第一个字符串。其实这是一个贪心过程,每一步都是最优的。
学习之处:
1.由于字符串的长度不确定,即无法预知其大小,所以用传统的数组行不通。后来想到用string(之前只是有过了解,但没有用过),即解决了字符串长度的问题。string只能用cin和cout输入输出,string初始长度为0,如果要直接赋值,只能对长度之内的元素赋值。可直接+ 和 =。 输出时遇到\0不会停止输出,而是输出所有的元素。
代码如下:
[cpp] view
plain copy
#include<bits/stdc++.h>
using namespace std;
string a[500005],tmp;
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i<n; i++)
cin>>a[i];
for(int i = n-2; i>=0; i--)
{
int len = a[i].size();
tmp = "";
for(int j = 0; j<len; j++)
{
if(a[i][j]>a[i+1][j])
{
a[i] = tmp;
break;
}
else if(a[i][j]<a[i+1][j])
{
for(int k = j; k<len; k++) tmp += a[i][k];
a[i] = tmp;
break;
}
else if(a[i][j]==a[i+1][j]) tmp += a[i][j];
}
}
for(int i = 0; i<n; i++)
cout<<a[i]<<endl;
}
题解:
题意:给出n行字符串,对其进行字典序剪辑。我自己的想法是正向剪辑的,即先对第一第二个字符串进行剪辑,但是这样却不能保证前面的操作是正确的,当后面突然出现一个字典序很小的字符串,那么前面的操作将非法。这种方法错在不能预知正在操作的字符串的字典序限度。看了别人的代码,发现是反向进行剪辑的,即从倒数第一第二个字符串进行剪辑,直到第一个。因为倒数第一个的字典序必须是最大,所以倒数第二个的字典序限度已知,所以可直接对其操作,并能保证操作时合法的,即在字典序限度之内,以此类推,直到第一个字符串。其实这是一个贪心过程,每一步都是最优的。
学习之处:
1.由于字符串的长度不确定,即无法预知其大小,所以用传统的数组行不通。后来想到用string(之前只是有过了解,但没有用过),即解决了字符串长度的问题。string只能用cin和cout输入输出,string初始长度为0,如果要直接赋值,只能对长度之内的元素赋值。可直接+ 和 =。 输出时遇到\0不会停止输出,而是输出所有的元素。
代码如下:
[cpp] view
plain copy
#include<bits/stdc++.h>
using namespace std;
string a[500005],tmp;
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i<n; i++)
cin>>a[i];
for(int i = n-2; i>=0; i--)
{
int len = a[i].size();
tmp = "";
for(int j = 0; j<len; j++)
{
if(a[i][j]>a[i+1][j])
{
a[i] = tmp;
break;
}
else if(a[i][j]<a[i+1][j])
{
for(int k = j; k<len; k++) tmp += a[i][k];
a[i] = tmp;
break;
}
else if(a[i][j]==a[i+1][j]) tmp += a[i][j];
}
}
for(int i = 0; i<n; i++)
cout<<a[i]<<endl;
}
相关文章推荐
- 777D - Cloud of Hashtags
- Codeforces Round #385 (Div. 1) C. Hongcow Buys a Deck of Cards
- Codeforces Round #277.5(Div. 2) C. Given Length and Sum of Digits...【贪心】
- Prebuilt binaries of PCL (point cloud library) for Linux
- definition of cloud computing
- Codeforces Round #356 (Div. 2) D. Bear and Tower of Cubes dfs
- Codeforces Beta Round #27 (Codeforces format, Div. 2) E. Number With The Given Amount Of Divisors 反素数
- Invalid location of tag (div) 错误
- Show and hide of div
- Codeforces Round #319 (Div. 1) B. Invariance of Tree
- Codeforces Round #398(Div. 2)D. Cartons of milk【二分+暴力处理】
- codeforce 310 div2 D题 Case of Fugitive
- 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas
- Codeforces Round #260 (Div. 1) B. A Lot of Games Trie + 博弈
- Codeforces Round #401(Div. 2)D. Cloud of Hashtags【逆序思维】
- Codeforces Round #310 (Div. 1) B. Case of Fugitive 贪心
- Codeforces Round #437 (Div. 2 C. Ordering Pizza 贪心 only two types of pizza
- Codeforces Round #260 (Div. 1) --B. A Lot of Games (Trie)
- Codeforces Round #277.5 (Div. 2)——C贪心—— Given Length and Sum of Digits
- Is Fabric Computing the Future of Cloud?