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

本文共 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/7564129.html

你可能感兴趣的文章
xargs用法
查看>>
Composer 安装
查看>>
cacti插件的下载链接
查看>>
SpringMVC 搭建
查看>>
CentOS中查看物理CPU信息的方法
查看>>
Spring如何为bean注入null值
查看>>
300+零售CIO大咖齐聚杭州 他们聊了什么?
查看>>
【游戏开发备注之二】配置Xcode版本控制SVN详细步骤内含部分问题解决方案
查看>>
学习编程,如果当初有人给我这些忠告就该有多好!
查看>>
书生教你cocos2d-x-保卫萝卜(四)
查看>>
怎么关联eclipse和夜神安卓模拟器
查看>>
极速理解设计模式系列:8.策略模式(Strategy Pattern)
查看>>
MySQL修改复制密码后。。。
查看>>
葡萄城报表模板库更新:新增6个行业、50张经典报表模板
查看>>
Tomcat中JVM内存溢出及合理配置
查看>>
关于条件测试及exit命令
查看>>
linux增加路由命令
查看>>
bash的环境配置文件
查看>>
zookeeper 集群
查看>>
2016中国大数据市场研究报告
查看>>