当前位置:网站首页>Poj3617 best cow line

Poj3617 best cow line

2022-07-06 19:50:00 Full stack programmer webmaster

Hello everyone , I meet you again , I'm the king of the whole stack .

Although the question is simple , But it's very good , Because the process is very good . Comparison of development ideas And encourage people to , It's not like being greedy , Push the poor , But it's annoying

In view of the long N string S, And then the empty string STR. Whenever there are two choices 1: Delete S Add the first element of falsehood STR On 2: Delete S Add the last element STR On

Yes STR Dictionary order is the smallest And the output

At first, I may have no worries to think about Every comparison S The head and tail elements Take the smaller one and delete it if STR in . But if S If the head and tail elements are the same, this method will not work , Because it depends on the elements between them to take the head or tail first , At this time, it's better to come backwards or to follow ? Then it's better to compare the dictionary order between the straight one and the reverse one , So when the head and tail are equal, they can be included in the middle ,

practice :

character string S. Then invert to get S1, Compare the size if S Small , Then take S The head element of . if S If it's big, take S The tail element of , Then take it. S The horse . Compared with its inversion , Do it in such a cycle N You can do it next time

#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set>
#include<cctype>

#define ll long long

#define LL __int64

#define eps 1e-8

#define inf 0xfffffff

//const LL INF = 1LL<<61;

using namespace std;

//vector<pair<int,int> > G;
//typedef pair<int,int > P;
//vector<pair<int,int> > ::iterator iter;
//
//map<ll,int >mp;
//map<ll,int >::iterator p;

string s;
string str;
string ans;
string ch;

int main() {
	int n;
	bool flag = false;
	while(cin>>n) {
		while(n--) {
			cin>>ch;
			s += ch;
		}
		str = s;
		reverse(s.begin(),s.end());
		int len = s.length();
		while(len--) {
			if(str < s) {
				ans += str[0];
				str.erase(0,1);
			}
			else {
				ans += str[str.length() - 1];
				str.erase(str.length() - 1,1);
			}
			s = str;
			reverse(s.begin(),s.end());
		}
		for(int i=0;i<ans.length();i++) {
			cout<<ans[i];
			if((i+1)%80 == 0)puts("");
		}
		puts("");
	}
	return 0;
}

Copyright notice : This article is an original blog article , Blog , Without consent , Shall not be reproduced .

Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/117137.html Link to the original text :https://javaforall.cn

原网站

版权声明
本文为[Full stack programmer webmaster]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207061146428523.html