【CJOJ P1957】【NOIP2010冲刺十模拟赛】数字积木
来源:互联网 发布:小说阅读网软件 编辑:程序博客网 时间:2024/06/10 12:08
【NOIP2010冲刺十模拟赛】数字积木
http://oj.changjun.com.cn/problem/detail/pid/1957
Description
小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢? 你的任务就是读入n个数字积木,求出所能形成的最大数。
Input
共N+1行。
第一行是一个整数n,接下来n行每行是一个正整数
Output
一个整数,为所能形成的最大整数。
样例输入
3
13
134
343
样例输出
34313413
数据范围
对于30%的数据,n<=10,每个数<=10^3。
对于50%的数据,n<=100。
对于100%的数据,n<=1000,每个数<=10^200。
题解
这题其实不难,如果只用贪心的话也可以得到30分。当然,这题就是按照某一种方法来对这些读入的进行排序,数据又不大,直接写冒泡排序就行,所以只要自己写比较函数cmp即可AC。现在我们来看怎么写比较函数。也很简单,只要把两个待比较的串分别加在各自的后面,使得它们的长度相等,然后一位一位比较大小即可,所以程序也非常简短。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>using namespace std;bool cmp(string c,string s){ char ch; int l; string bc,bs; bc=c+s; bs=s+c; if(bc>bs)return true; else return false; }//比较函数,只需要把两个待比较的串放在各自的后面然后比较大小就行了int n;string s[1001];int main(){ cin>>n; for(int i=1;i<=n;++i) cin>>s[i]; //读入部分 for(int i=1;i<=n;++i) for(int j=i+1;j<=n;++j) if(!cmp(s[i],s[j]))swap(s[i],s[j]); //排序部分,就是简单的冒泡 for(int i=1;i<=n;++i) cout<<s[i]; cout<<endl; return 0; }
0 0
- 【CJOJ P1957】【NOIP2010冲刺十模拟赛】数字积木
- 【NOIP2010冲刺十二模拟赛】奶牛晒衣服
- 【noip2010模拟赛】classroom
- [NOIP2010冲刺十二] 奶牛排队
- [NOIP2010冲刺十三] 逃离遗迹
- CJOJ P1893 【Nescafé29模拟赛】穿越七色虹
- CJOJ 1943 【重庆八中模拟赛】寻找代表元
- 中山纪念中学 NOIP2010模拟赛
- 【NOIP2010 模拟赛】晨跑路径
- CJOJ 1087 【NOIP2010】乌龟棋 / Luogu 1541 乌龟棋
- [NOIP2010]机器翻译 队列+模拟
- 【模拟】【NOIP2010】机器翻译 translate
- [模拟][NOIP2010] 机器翻译
- noip2010 机器翻译 (模拟)
- [noip2010模拟] 保龄球
- 数字统计(NOIP2010)
- 2017-03-11 【NOIP2010 模拟赛】晨跑路径
- [NOIP2017模拟]玩积木
- JSTL表达式与EL表达式用法*更新版*
- 总线设备驱动模型---platform篇
- 【C语言】递归 - 汉诺塔
- C#练习--实现超市购物结算
- 集合与数组之间的相互转换
- 【CJOJ P1957】【NOIP2010冲刺十模拟赛】数字积木
- android 应用对内存是如何限制的?我们应该如何合理使用内存?如何限制的?
- apache服务器安装虚拟机
- 序列合并(codevs1245 最小的N个和)
- 文字排版--字体
- C#中利用委托实现多线程跨线程操作
- BZOJ 1057
- 小W计树
- TF-IDF模型