poj-3617字典序最小 贪心
2018-03-20 11:44
239 查看
[b]思路:[/b] 开始的思路没有理清,我想的是先比较首尾的,一旦发现首尾字符相同就从后往前扫,直到扫到一个后面的字符和前面的不一样就结束...还是我太菜了。
正确的思路应该是(借鉴了挑战的思路):
定义一个标记位Left(表示是否输出的左边的字符),逐个比较首尾(0与N比、1与N-1比较、2与N-2比较...),每当满足比较条件(即两个字符不相同,一大一小)就给标记位标记上,最后根据标记位的值进行输出,切记每行满80字符要换行(PE所在)。
[b]AC代码:[/b]#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdio>
#include<queue>
using namespace std;
const int maxn=10005;
int N;
char s[maxn];
bool Left;
int main(){
cin>>N;
for(int i=0;i<N;i++)
cin>>s[i];
int a=0,b=N-1;
int ans=0;
while(a<=b){
bool Left=false;
if(s[a]==s[b]){
int k=b-1;
while(s[k]==s[a+1]&&k>=a+1)k--;
if(s[k]<s[a+1])
}
ans++;
if(ans==80){
cout<<endl;
ans=0;
}
}
cout<<endl;
return 0;
}
正确的思路应该是(借鉴了挑战的思路):
定义一个标记位Left(表示是否输出的左边的字符),逐个比较首尾(0与N比、1与N-1比较、2与N-2比较...),每当满足比较条件(即两个字符不相同,一大一小)就给标记位标记上,最后根据标记位的值进行输出,切记每行满80字符要换行(PE所在)。
[b]AC代码:[/b]#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdio>
#include<queue>
using namespace std;
const int maxn=10005;
int N;
char s[maxn];
bool Left;
int main(){
cin>>N;
for(int i=0;i<N;i++)
cin>>s[i];
int a=0,b=N-1;
int ans=0;
while(a<=b){
bool Left=false;
if(s[a]==s[b]){
int k=b-1;
while(s[k]==s[a+1]&&k>=a+1)k--;
if(s[k]<s[a+1])
}
ans++;
if(ans==80){
cout<<endl;
ans=0;
}
}
cout<<endl;
return 0;
}
相关文章推荐
- POJ 3617 Best Cow Line(贪心+最小字典序)
- 字典序最小问题 前后删除加入 贪心poj3617
- POJ 3617 Best Cow Line (字典序最小_贪心)
- POJ 3617 Best Cow Line [贪心] [字典序最小]
- poj-3617字典序最小 贪心
- poj-3617字典序最小 贪心
- poj-3617字典序最小 贪心
- poj-3617字典序最小 贪心
- POJ 3617 字典序最小问题
- poj 3617字典序最小问题
- POJ 3617 Best Cow Line(字典序最小问题)
- POJ 3617 字典序最小
- POJ 3617 字典序贪心
- 2.2.3 字典序最小问题 -Best Cow Line(POJ 3617)
- poj 3617 Best Cow Line(贪心)
- POJ 3617 Best Cow Line (基础贪心)
- POJ - 2376 Cleaning Shifts 贪心(最小区间覆盖)
- poj 1041 John's trip (边最小字典序欧拉路径 Fleury)
- POJ 3617 Best Cow Line 贪心
- poj 3617 贪心