博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ3617 Best Cow Line【水题】
阅读量:6701 次
发布时间:2019-06-25

本文共 1035 字,大约阅读时间需要 3 分钟。

USACO 2007 November Silver

问题链接:

问题简述:输入一个正整数N,再输入N行,每行包含一个字母('A'-'Z'),将这些字母按顺序构成一个字符串S。按照以下规则取字符,顺序构成一个新的字符串T,T是按照字典顺序最小的。

1.从S的头取一个字符并且删除该字符,连接到T中(开始时T为空串);

2.从S的尾取一个字符并且删除该字符,连接到T中。

问题分析:这是用一个字符串构建另外一个字符串的问题。比较S的首字符和尾字符,取其小连接到T中即可;当首尾字符相同时,则需要比较下一个,尽量取下一个较小的;当S是一个回文串时,则从哪边取字符结果都是一样的。

程序说明

使用一个函数test()来比较哪边更小,是一个最为有效的方法,可以使得程序逻辑更加简洁。需要注意的一点是,输出时,每行最多输出80个字符,即每80个字符输出一个换行。

比起使用排序的程序,这个程序要快速一些。

AC的程序如下:

/* POJ3617 Best Cow Line */#include 
using namespace std;//#define DEBUGconst int LEFT = 1;const int RIGHT = 2;const int MAXN = 2000;char a[MAXN+1];int test(char s[], int start, int end){ while(start < end) { if(s[start] < s[end]) return LEFT; else if(s[start] > s[end]) return RIGHT; start++; end--; } return LEFT;}int main(){ int n; cin >> n; for(int i=0; i
> a[i]; a[n] = '\0';#ifdef DEBUG cout << a << endl;#endif int start=0, end=n-1, count=0; for(int i=0; i

转载于:https://www.cnblogs.com/tigerisland/p/7564130.html

你可能感兴趣的文章
第 三 十 八 天:Linux 的 LVM 逻 辑 卷 管 理
查看>>
Flex通过Blazeds利用Remoteservice与后台java消息推送
查看>>
python3 实现对比conf 文件差异
查看>>
vueX的使用
查看>>
Android的TextView在显示文字的时候,如果有段中文有英文,有中文,有中文标点符号,你会发现,当要换行的时候遇到中文标点, 这一行就会空出很多空格出来...
查看>>
bupt summer training for 16 #3 ——构造
查看>>
github 如何设置项目的语言显示
查看>>
树莓派(Raspberry Pi):完美的家用服务器
查看>>
微信jssdk遇到的一些问题汇总
查看>>
Code Chef December Challenge 2018题解
查看>>
【IntelliJ IDEA】添加一个新的tomcat,tomcat启动无法访问欢迎页面,空白页,404
查看>>
PE文件RV转FOA及FOA转RVA
查看>>
哪些要素会让咱们呈现抑郁症的病症
查看>>
mysql
查看>>
使用vue+webpack从零搭建项目
查看>>
linux命令二
查看>>
《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(13)--- 线程安全接口和双检查加锁优化...
查看>>
navicat 官方使用手册,中文版,快捷键大全
查看>>
结对开发:电梯调度(2)
查看>>
Java中的继承性特性
查看>>