NOIP2017SummerTraining0712
个人感受:打了三个小时不到的第一题,然后也就没有多少时间去搞第二题了,特别是第二题还看到了期望这样的东西,这个难以理解,第三题的树分治,myx大佬说50分好拿,但是我觉得也挺难拿的。
单词检索
时间限制: 1 Sec 内存限制: 128 MB
提交: 671 解决:
105
[提交][状态][讨论版]
题目描述
小可可是学校图书馆的管理员,现在他接手了一个十分棘手的任务。
由于学校需要一些材料,校长需要在文章中检索一些信息。校长一共给了小可可N篇文章,每篇文章为一个字符串。现在,校长需要他找到这样的单词,它至少在这N篇文章中的M篇文章里出现过,且单词长度为L。可是,工作量十分庞大,但校长又急需小可可完成这项任务。
现在他向你求助,需要你编写程序完成这项艰巨的任务。
输入
第1行3个正整数N,M,L,表示文章的数目,单词至少出现在M篇文章中和每个单词的长度。
接下来N行,每行一个字符串,表示一篇文章。
输出
仅一行,表示满足检索条件的单词数。
样例输入
3 2 2 noip istudycpp imacppstudent
样例输出
5
对于20%的数据有1≤N,M≤10;
对于100%的数据有1≤N,M≤2000,L≤1000。每篇文章长度不大于1000,均有小写字母组成。
这道题就是一个hash映射,一开始想了trie树和kmp,但是trie树的空间是真的大,指数级别增长还得研究过才行,这里用到了一个
非常重要的结论:一次解决一O(N)的时间求出每段连续子串的hash值,1----j,2----j+1,,3----j+2 ......就是1*k^t%MOD对答案hash的贡献值是确定的,那就直接可以了,在在答案中减去就可以了。
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<map>
using namespace std;
;
;
long long he;
map<long long,int>flag;
map<long long,int>last;
];
];
int main()
{
scanf("%d%d%d",&n,&m,&l);
he=;
;i<l;i++)
he=(he*)%MOD;
;i<=n;i++)
{
scanf("%s",s);
int len=strlen(s);
;
;j<l-;j++) x=(x*+(s[j]-'a'))%MOD;
;j<len;j++)
{
x=(x*+s[j]-'a')%MOD;
if (!flag[x])
{
a[++a_zhi]=x;
flag[x]++;
last[x]=i;
}
else if (last[x]!=i) flag[x]++,last[x]=i;
x=(x-(s[j-l+]-'a')*he+MOD)%MOD;
}
}
;
;i<=a_zhi;i++)
if (flag[a[i]]>=m) ans++;
printf("%d\n",ans);
}
无聊的游戏
时间限制: 1 Sec 内存限制: 256 MB Special Judge
提交:
213 解决: 42
[提交][状态][讨论版]
题目描述
学校的运动会开始了,体能很菜的小可可没报任何比赛项目,于是和同学们玩一个十分无聊的游戏。
游戏在一个由n*n个方格组成的正方形棋盘上进行,首先在每个方格上均匀随机地填入1到m之间的正整数(每个方格填的数均不同),然后小可可均匀随机地选出k个1到m的数字(可能选的数不在棋盘上),把它们出现在棋盘上的方格涂黑,设有R行被整行涂黑,有C列被整列涂黑,小可可便可以得到2^(R+C)分。
现在小可可想知道他的期望得分是多少,你能帮助他吗?
输入
第一行包含三个正整数n,m,k。
输出
仅一行包含一个实数,为期望得分,如果答案>10^99,就输出10^99,输出被认为正确当且仅当你的输出与标准输出的相对误差不超过10-6。
样例输入
1 2 1
样例输出
2.5
提示
【数据范围】
对于30%的数据,2≤n≤5
对于60%的数据,2≤n≤10,m≤200
对于100% 的数据,2≤n≤300
这道题是非常不错的,我准备再开一篇blog来写这道题,写的是后是0分。
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
;
int n,m,k;
double f[N],g[N*N],ans;
int main()
{
scanf("%d%d%d",&n,&m,&k);
]=;i<=n;i++)
f[i]=f[i-]/i*(n-i+);
]=;i<=m;i++)
g[i]=g[i-]/(m-i+)*(k-i+);
;i<=n;i++)
;j<=n;j++)
{
int t=(i+j)*n-i*j;
if(t>k) continue;
ans+=f[i]*f[j]*g[t];
}
ans=ans>1e99?1e99:ans;
printf("%lf",ans);
}
NOIP2017SummerTraining0712的更多相关文章
随机推荐
- v-cloak 实现vue实例未编译完前不显示
前言: 由于网速原因,(ps:之前同事无意间在网速很差的情况下测出的)在使用vue开发时,会由于vue实例还没编译成功的时候数据绑定的"Mustache"标签会闪现一下,造成不好的 ...
- vs下开端口直接调试iis
有些时候我们接口调试不想发布然后挂到iis下面,因为这样子调试有点麻烦,不是不可以调试.当然我们就希望在vs下直接运行直接打断点调试! 只需要三步就可以实现: 1) 找到这个文件 2) 打开上面文 ...
- selenium python自动化测试 ddt数据驱动
安装ddt pip install ddt 直接上代码: # coding:utf-8 import ddt import time import excelunit import unittest ...
- 10分钟学会ES7+ES8
撰文为何 身为一个前端开发者,ECMAScript(以下简称ES)早已广泛应用在我们的工作当中.了解ECMA机构流程的人应该知道,标准委员会会在每年的6月份正式发布一次规范的修订,而这次的发布也将作为 ...
- Spark Submit 脚本
当我们需要命令行传递参数时候,将--class 写在前面,然后是jar 最后是参数 spark-submit --master yarn --num-executors 3 --executor-me ...
- Java+大数据开发——Hadoop集群环境搭建(二)
1. MAPREDUCE使用 mapreduce是hadoop中的分布式运算编程框架,只要按照其编程规范,只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序 2. Demo开发--wo ...
- 说说 DWRUtil
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp27 说说 DWRUtil 比如我们从服务器端获得了一个citylist的数 ...
- test文件伪装
该文件属于伪装图片类型.图片另存后把后缀改为rar将看到txt文件. 利用了 cmd cp /b 命令 命令格式:copy /b 文件1+文件2+......文件N 合并后的文件名<br&g ...
- 【Beta】Daily Scrum Meeting——Day5
站立式会议照片 1.本次会议为第五次Meeting会议: 2.本次会议在早上9:35,在陆大2楼机房召开,本次会议为25分钟讨论今天要完成的任务以及接下来的任务安排. 燃尽图 每个人的工作分配 成 员 ...
- C语言之算法初步(汉诺塔--递归算法)
个人觉得汉诺塔这个递归算法比电子老鼠的难了一些,不过一旦理解了也还是可以的,其实网上也有很多代码,可以直接参考.记得大一开始时就做过汉诺塔的习题,但是那时代码写得很长很长,也是不理解递归的结果.现在想 ...