poj 3617 贪心

背景:第一次没有考虑到相等的情况,wa了,改正后re了几次。。。

思路:贪心思想,但是当两边都相等的时候选哪一边才是关键,这是我的处理方法是,继续对2和n-1个字符比较,如果2小就从左边开始,n-1小就从右边开始,如果还是相等就继续比较2和n-2........

书上的思想也是类似原理。

我的代码:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;


int main(void){
    int n;
    while(cin >> n) {
        char c;
        string s,t;
        for(int i = 0; i < n; i++) {
            cin >> c;
            s += c;
        }
        int i = 0 , j = n - 1;
        while(true) {
            if(i == j) {
                t += s[i];
                break;
            }
            bool ok = false;
            if(s[i] == s[j]) {
                int x = i , y = j;
                for(;x != y;x++,y--) {
                    if(s[x] != s[y]) {
                        if(s[x] < s[y]) ok = true;
                        break;
                    }
                }
            }
            if(s[i] < s[j] || ok){
                t += s[i];
                i++;
            }else {
                t += s[j];
                j--;
            }
        }
        for(int i = 0,j = 0; i <= 80; i++) {
            if(j + i >= t.size()) break;
            if(i == 80){
                putchar('\n');
                j += 80;
                i = -1;
                continue;
            }
            cout << t[j+i];
        }
        cout << endl;
    }
    return 0;
}

你可能感兴趣的:(贪心)