贪心
POJ3617贪心
描述
给定长度为N的字符串s,要构造一个长度为N的字符串T。期初,T是一个空串。
然后以下操作:
从S的头部删除一个字符,加到T的尾部。
从S的尾部删除一个字符,加到T的尾部。
目标是要使构造的字典序尽可能小。
思路
- 我们很容易想到每次就看字符串S的头尾,把小的删除掉放到T的尾部就好。但是存在一个问题,当头尾的字符一样的时候,就必须要比较下一个字符的大小。
- 所以我们就建立把S反过来为S2,S2与S比较,S小就把S的头字符删除;反之就把S2的头字符删除。
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 2010;
char s[maxn];
char s2[maxn];
char ans[maxn];
int n;
int strcmp(const char *src,const char *dst,int i,int j)
{
int flag = 0;
for(; i < n && j < n ; i ++, j ++)
{
if(src[i] < dst[j])
return 1;
else if(src[i] > dst[j])
return -1;
}
return 0;
}
int main()
{
cin >> n ;
for(int i = 0; i < n; i ++)
{
cin >> s[i];
s2[n-1-i] = s[i];
}
//cout<<s<<" "<<s2<<endl;
//cout<<strcmp(s,s2,1,0)<<endl;