2016.11.14测试 长乐一中2014NOIP复赛模拟题 第一题。
1.正确答案
【题目描述】
小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案。
“吔,我的答案和你都不一样!”,小Y说道,”我们去找神犇们问答案吧”。
外卡组试卷中共有m道判断题,小H与小Y一共从其他n个神犇那问了答案。之后又从小G那里得知,这n个神犇中有p个考了满分,q个考了零分,其他神犇不为满分或零分。这可让小Y与小H犯了难。你能帮助他们还原出标准答案吗?如有多解则输出字典序最小的那个。无解输出-1。
【输入格式】
第一行四个整数n, m, p, q,意义如上描述。
接下来n行,每一行m个字符’N’或’Y’,表示这题这个神犇的答案。
【输出格式】
仅一行,一个长度为m的字符串或是-1。
【样例输入】
2 2 2 0
YY
YY
【样例输出】
YY
【数据范围】
30% : n <= 100.
60% : n <= 5000 , m <= 100.
100% : 1 <= n <= 30000 , 1 <= m <= 500. 0 <= p , q 且 p + q <= n.
题解是这样说的:
30%: O(n ^ 2 * m)暴力判断。
100%: 很显然答案的可能性最多只有n种,所以我们将所有人的答案按字典序排序后枚举 将每个人的答案作为正确答案来进行判断。由于是判断题,若当前人的答案为正确答 案则零分者的答案也就确定了,那么只需统计出这两种答案的人数判断是否满足题意 即可。这一步使用字符串哈希即可解决。
代码如下 :
- #include <algorithm>
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <cmath>
- using namespace std;
- const int N = 3e4 + , M = 5e2 + , sed = , SED = , mod = , MOD = ;
- int n, m, p, q, ans, hash[N], HASH[N];
- int top, info[mod], nxt[N * ], fet[N * ], cnt[N * ];
- struct node {
- char s[M];
- inline bool operator < (const node &b) const {
- return strcmp(s, b.s) < ;
- }
- } a[N];
- inline void Insert(const int &x, const int &y) {
- for (int k = info[x]; k; k = nxt[k])
- if (fet[k] == y) {
- ++cnt[k]; return ;
- }
- nxt[++top] = info[x]; info[x] = top;
- fet[top] = y; cnt[top] = ;
- return ;
- }
- inline int Query(const int &x, const int &y) {
- for (int k = info[x]; k; k = nxt[k])
- if (fet[k] == y) return cnt[k];
- return ;
- }
- inline void Solve1() {
- int tmp, TMP; ans = -;
- for (int i = ; i < n; ++i) {
- tmp = TMP = ;
- for (int j = ; j < m; ++j) {
- tmp = (tmp * sed + (a[i].s[j] == 'N')) % mod;
- TMP = (TMP * SED + (a[i].s[j] == 'N')) % MOD;
- }
- hash[i] = tmp, HASH[i] = TMP;
- Insert(tmp, TMP);
- }
- for (int i = ; i < n; ++i)
- if (Query(hash[i], HASH[i]) == p) {
- tmp = TMP = ;
- for (int j = ; j < m; ++j) {
- tmp = (tmp * sed + (a[i].s[j] == 'Y')) % mod;
- TMP = (TMP * SED + (a[i].s[j] == 'Y')) % MOD;
- }
- if (Query(tmp, TMP) == q) {
- ans = i; break;
- }
- }
- if (ans != -) printf("%s\n", a[ans].s);
- else puts("-1");
- return ;
- }
- char cur[M];
- inline void Solve2() {
- int tmp, TMP; ans = -;
- for (int i = ; i < n; ++i) {
- tmp = TMP = ;
- for (int j = ; j < m; ++j) {
- tmp = (tmp * sed + (a[i].s[j] == 'N')) % mod;
- TMP = (TMP * SED + (a[i].s[j] == 'N')) % MOD;
- }
- hash[i] = tmp, HASH[i] = TMP;
- Insert(tmp, TMP);
- }
- for (int i = n - ; i >= ; --i)
- if (Query(hash[i], HASH[i]) == q) {
- tmp = TMP = ;
- for (int j = ; j < m; ++j) {
- tmp = (tmp * sed + (a[i].s[j] == 'Y')) % mod;
- TMP = (TMP * SED + (a[i].s[j] == 'Y')) % MOD;
- }
- if (Query(tmp, TMP) == p) {
- ans = i; break;
- }
- }
- if (ans != -) {
- for (int i = ; i < m; ++i)
- cur[i] = a[ans].s[i] == 'N' ? 'Y' : 'N';
- printf("%s\n", cur);
- }
- else puts("-1");
- return ;
- }
- void Solve3() {
- int tmp, TMP;
- for (int i = ; i < n; ++i) {
- tmp = TMP = ;
- for (int j = ; j < m; ++j) {
- tmp = (tmp * sed + (a[i].s[j] == 'N')) % mod;
- TMP = (TMP * SED + (a[i].s[j] == 'N')) % MOD;
- }
- Insert(tmp, TMP);
- tmp = TMP = ;
- for (int j = ; j < m; ++j) {
- tmp = (tmp * sed + (a[i].s[j] == 'Y')) % mod;
- TMP = (TMP * SED + (a[i].s[j] == 'Y')) % MOD;
- }
- Insert(tmp, TMP);
- }
- bool flag = true;
- for (int i = ; i < m; ++i) cur[i] = 'N';
- do {
- tmp = TMP = ;
- for (int j = ; j < m; ++j) {
- tmp = (tmp * sed + (cur[j] == 'N')) % mod;
- TMP = (TMP * SED + (cur[j] == 'N')) % MOD;
- }
- if (Query(tmp, TMP) == ) {
- flag = true; break;
- }
- flag = false;
- for (int j = m - ; j >= ; --j)
- if (cur[j] == 'Y') cur[j] = 'N';
- else {
- cur[j] = 'Y'; flag = true; break;
- }
- } while (flag);
- if (flag) printf("%s\n", cur);
- else puts("-1");
- return ;
- }
- int main() {
- freopen("answer.in", "r", stdin);
- freopen("answer.out", "w", stdout);
- scanf("%d%d%d%d", &n, &m, &p, &q);
- for (int i = ; i < n; ++i) scanf("%s", a[i].s);
- sort(a, a + n);
- if (p) Solve1();
- else if (q) Solve2();
- else Solve3();
- fclose(stdin); fclose(stdout);
- return ;
- }
2016.11.14测试 长乐一中2014NOIP复赛模拟题 第一题。的更多相关文章
- NOIP2010-普及组复赛模拟试题-第一题-手机
题目背景 Background 现在手机使用越来越广泛了 题目描述 Description 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下.例如要按出 x 就得按 9 两下,第一 ...
- NOIP2011-普及组复赛模拟试题-第一题-NBA总冠军
题目背景 Background 一年两度的期末考要到来了!! 题目描述 Description 又要到考试了,Ljw决定放松一下,就打开电视,看见了篮球赛,他立即想到了每年的NBA总冠军队伍.由 ...
- nginx学习记录/2016.11.14
nginx(engine X)是一个高性能的web服务器和反向代理服务器以及电子邮件代理服务器 由俄罗斯的程序设计师Igor Sysoev所开发 nginx+tomcat实现负载均衡 参考地址:htt ...
- 2016.11.14 MIT challenge之课程总览
Degree Chartshttp://catalog.mit.edu/degree-charts/computer-science-engineering-course-6-3/ MIT Chall ...
- noip2003复赛普及组第一题——乒乓球
/*======================================================================= 题一.乒乓球(Table.pas) [问题背景]国际 ...
- NOIP2010-普及组复赛模拟试题-第二题-数字积木
题目描述 Description 小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢?你的任务就是读入 n 个数字积木,求出所能形成的最大数 ...
- NOIP2011-普及组复赛模拟试题-第二题-买票
题目背景 Background Ztc真的遇上黄牛了... 题目描述 Description 周末Ztc想去剧场看演出,但是他没有票.这时,救世主Wzj出现了,他慷慨地愿意卖给Ztc一些票. ...
- NOIP2008复赛 提高组 第一题
描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多的 ...
- 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...
随机推荐
- Mac wifi已打开但尚未连接到网络
把网络偏好设置 里面的询问新网络 关闭了 然后 重启电脑 试一下 应该就可以了
- DOS 下 mysql 导入.SQL
- PHPMailer不能发送邮件
PHPMailer不能连接SMTP服务器,和修改SMTP大小写没有关系 (2011-10-22 12:17:35) 转载▼ 标签: php phpmailer 杂谈 分类: 默认分类 PHPmaile ...
- Mac下修改Hosts文件工具——Gas Mask
这段时间在做公司APP的项目,看到公司开发IOS的同事和我这边联调程序时,经常需要手动修改hosts文件,比较麻烦. 在公司忙,没有来及找,给同事推荐了我当时知道的一个切换hosts文件的工具:sma ...
- 转:SVN常见问题与解决方法
今天发现一个SVN很奇葩的问题.原来SVN提交的时候也是识别提交路径的大小写的... 发现网上有篇博客总结的挺好的.转载下来,转载出路:http://blog.csdn.net/shinn613/ar ...
- LCS(Longest Common Subsequence 最长公共子序列)
最长公共子序列 英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已 ...
- 虚拟机中MySQL连接问题:Lost connection to MySQL server at 'reading initial communication packet, system error: 0 以及 host is not allowed to connect mysql
环境:在VirtualBox中安装了Ubuntu虚拟机,网络使用了NAT模式,开启了端口转发. 局域网内其他计算机访问虚拟机中的MySQL Server出现两个问题: Lost connection ...
- SVN安装使用小结
SVN在实际的项目开发中有很广泛的用途.一开始接触SVN(Subversion),思路并不清楚,现在总算理清了. 声明:本文并不是系统地对SVN做介绍,而是笔者的使用总结,个人认为的一些要点,可能对初 ...
- 【英文版本】Android开源项目分类汇总
Action Bars ActionBarSherlock Extended ActionBar FadingActionBar GlassActionBar v7 appcompat library ...
- PlateSpin 完全复制由于LVM没有可用空闲空间导致失败
使用PlateSpin复制居然会由于LVM的卷组VG没有空闲可用的空间(available free space in the LVM volume group)创建快照而导致失败,特此记录一下:免得 ...