题目链接详见SCNU 2015新生网络赛 1007. ZLM的扑克牌
 
      其实我在想这题的时候,还想过要不要设置求最小的排列,并且对于回文数字的话,可以把扑克牌折起来(从而这个数字会变小);甚至要不要设置扑克牌旋转、翻转之后,读出的数字要改变。但这样的话好像我也不会做辣!= =|||于是这道题目最后就变成了一个简单贪心题。题目大意大概就是这样的:给出一个包含$n$个数字的多重集,要求使用集合中的元素拼凑出一个最大的数字,问最大所能拼凑出的数字是多少?
 
      贪心算法需要对贪心策略进行证明。比如大部分同学可能会想到的是,做一个简单的排序,把数字大的排在前面,数字小的排在后面,然后按顺序输出就好啦!但很可惜这是错的!因为对于$12345$,它比$67$要大,但$67$应该排在它的前面,因为$1234567$是小于$6712345$的。
 
      我们考虑两个数字串$A$和$B$,组合得到一个新的数字串$AB$或$BA$,定义关系$\succ$,当且仅当$AB > BA$严格成立时,$A \succ B$成立。对于集合中另一个数字串$C$且$A \succ B$,如果$C \succ A$,则一定满足$C \succ B$;如果$B \succ C$,则一定满足$A \succ C$;否则应当再进行一次比较以确定$A$、$B$、$C$三者的序关系。对于全集$S_{N}$,至多进行有限次即$O(N^{2})$的比较可以使整个集合满足全序关系,于是基于这种比较的排序方法可行。
 
      接下来考虑下代码,因为输入输出量比较大,而时限只有1s,所以C++的输入输出方法被卡得死死的,只要使用了就一定会TLE。另外STL的string类也会导致TLE,这个我原先倒是没想过要卡的,但至少给大家一个警醒,不要滥用STL,STL大概为了做到泛型编程和通用性,通常会损失一些性能,因此在某些时候远不及于自己写的代码。
 #include <stdio.h>
#include <stdlib.h>
#include <string.h> namespace cmp {
char tx[], ty[];
int compare(const void*a, const void*b) {
strcat(strcpy(tx, (char*)a), (char*)b);
strcat(strcpy(ty, (char*)b), (char*)a);
return strcmp(ty, tx);
}
} char x[][];
int main() {
int cse, T, N, i;
scanf("%d", &T);
for(cse=; cse<=T; cse++) {
printf("Case #%d:\n", cse);
scanf("%d", &N);
for(i=; i<N; i++)
scanf("%s", x[i]);
qsort(x, N, , cmp::compare);
for(i=; i<N; i++)
printf(x[i]);
puts("");
}
return ;
}
 
      上面的代码用了C++的命名空间,你也可以选择用函数内静态变量,或直接暴露成全局变量。其中利弊请自行体会= =||
      另外注意一下我在qsort的compare中写的是strcmp(ba,ab),其中原因请参看strcmp函数返回值说明以及qsort函数参数说明,并注意一下$a$和$b$之间的关系。
 
      附:数据生成程序如下:
 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h> int main() {
freopen("in.txt", "w+", stdout);
int T = ;
printf("%d\n", T);
srand(time(NULL));
for(int a=; a<=; a++)
for(int b=; b<a*; b++) {
int N = rand()%((int)pow(, a)-)+;
printf("%d\n", N);
for(int i=; i<N; i++) {
int X = rand()%((int)pow(, -a)-)++(int)pow(rand()%, -a);
printf("%d ", X);
}
puts("");
}
return ;
}

Click To

 

SCNU 2015ACM新生赛初赛【1007. ZLM的扑克牌】解题报告的更多相关文章

  1. SCNU 2015ACM新生赛初赛【1006. 3D打印】解题报告

            题目链接详见SCNU 2015新生网络赛 1006. 3D打印 .出题思路来自codevs 3288. 积木大赛,属于模拟题.         首先我们把“选择从第L部分到第R部分”理 ...

  2. SCNU 2015ACM新生赛初赛【1001~1011】个人解题思路

            题目1001:       大意:已知$n$个角色,$m$种怪物种族,$k$个怪物,给出一组角色编号,编号$P_{i}$的角色能肝死编号$i$的怪物,对于给定的一组怪物编号,为了打通关 ...

  3. SCNU 2015ACM新生赛决赛【F. Oyk闯机关】解题报告

            题目大意:一个$N$$\times$$N$的阵列,每个格子有$X_{ij}$个调和之音,若每次只能选择走右边或下边,从左上角出发走到右下角,问最多能收集到多少个调和之音?       ...

  4. 【百度之星2014~初赛(第二轮)解题报告】Chess

    声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载.可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...

  5. 【百度之星2014~初赛(第二轮)解题报告】JZP Set

    声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...

  6. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  7. 【贪心+中位数】【新生赛3 1007题】 Problem G (K)

    Problem G Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  8. 安徽师大附中%你赛day6 T3 Hamsters [POI2010]CHO-Hamsters 解题报告

    [POI2010]CHO-Hamsters 题意: 给出n个互不包含的字符串,要求你求出一个最短的字符串S,使得这n个字符串在S中总共至少出现m次,问S最短是多少? 范围: \(1 \le n \le ...

  9. 【HHHOJ】ZJOI2019模拟赛(十三)03.10 解题报告

    点此进入比赛 得分: \(97+0+10=107\) 排名: \(Rank\ 3\) \(Rating\):\(+47\) \(T1\):[HHHOJ187]Hashit(点此看题面) 容易想到可以用 ...

随机推荐

  1. 【.net 深呼吸】将目录树转化为文本

    大伙都知道,文件系统是树形结构的,有时候我们会想到把目录的层次结构变为纯文本形式,就像这样: ├─Windows-universal-samples-master │ ├─Samples │ │ ├─ ...

  2. 使用Design包实现QQ动画侧滑效果和滑动菜单导航

    Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android Design Support Library,在这个supp ...

  3. 微信开发之Ngrok环境准备

    一.为什么要使用ngrok? 各位肯定都知道,做微信开发,我们的开发服务器需要和微信服务器做交互,SO,我们需要准备一台放置在公网的服务器,能够使得我们的服务器可以正常访问微信服务器,并且微信服务器也 ...

  4. 通过Http接口及SolrNet 两种方法基于Solr5.5.1 实现CURD

    前言 老规矩,任何技术的入门我通常都会总结增删改查,本文我就通过HttpWebRequest和SolrNet的方式实现Solr最基础的增删改查(CURD).对于自己的完整项目,同时不想过于依赖第三方类 ...

  5. .net两个对象比较,抛出不一样字段的结果

    现在应该经常用到记录操作日志,修改和新增必定涉及到两个实体的属性值的变动. 利用反射,将变动记录下来. 切记,类中的属性字段上面需要打上Description标签: 例如: /// <summa ...

  6. Django--自定义用户认证

    Django自带的用户认证 以前都是用Django自带的用户认证,用户名字段一对一关系对应Django--User表(其实它也是继承了abstractbaseuser). 1 2 3 from dja ...

  7. Ionic2系列-将beta升级到RC1

    国庆节前Ionic2发布了RC0版本,已经接近正式版了,前不久Angular2和TypeScript2也已经发布了正式版.详情请参考官方博客: http://blog.ionic.io/announc ...

  8. ICSharpCode.SharpZipLib 压缩、解压文件 附源码

    http://www.icsharpcode.net/opensource/sharpziplib/ 有SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, GZip, ...

  9. Redis初识

    安装与使用 Redis-x64-3.2.100:服务端 + 客户端 redis-3.2.5:源代码 Redis Desktop Manager - v0.8.8:客户端(基于Qt5的跨平台Redis桌 ...

  10. C#开发微信门户及应用(24)-微信小店货架信息管理

    在前面微信小店系列篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及<C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试& ...