5.3QBXT模拟赛
出题人:钟惠兴
题目名称 |
讨厌整除的小明 |
吸血鬼 |
鱼的感恩 |
题目类型 |
传统型 |
传统型 |
传统型 |
题目目录/可执行文件名 |
ming |
vamp |
fool |
输入文件名 |
ming.in |
vamp.in |
fool.in |
输出文件名 |
ming.out |
vamp.out |
fool.out |
每个测试点时限 |
1s |
1s |
1s |
内存限制 |
512m |
512m |
512m |
测试点数目 |
10 |
10 |
10 |
每个测试点分值 |
10 |
10 |
10 |
讨厌整除的小明
小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的数,认为那些数会分解数字k从而破坏掉k的美感……
有一天,他想:如果所有人都和自己一样,那么是不是喜欢两个含有倍数关系的不同数字的人就不能做朋友了?于是他想,至少用多少个集合,才能包括1到n的所有n个整数,使得所有存在倍数关系的两个不同数字在不同的集合里面?
小明脑子不好使,于是把问题交给了你。
输入格式
第一行一个数字q,表示询问次数
接下来q行,每一行一个数字n,表示问题中的n。
输出格式
共q行,每行一个数字,表示数字n对应的问题的答案。
输入输出样例 |
样例一 |
样例二 |
样例三 |
输入 |
1 5 |
2 7 10 |
2 1 200 |
输出 |
3 |
3 4 |
1 8 |
样例一解释
其中一种方案是{1}{2,5}{3,4}。
数据范围
数据编号 |
q |
n |
数据编号 |
q |
n |
1 |
1 |
<=20 |
6 |
300 |
<=5,000,000 |
2 |
3 |
<=20 |
7 |
1,600 |
<=1016 |
3 |
10 |
<=2,000 |
8 |
10,000 |
<=1016 |
4 |
20 |
<=2,000 |
9 |
60,000 |
<=1016 |
5 |
60 |
<=5,000,000 |
10 |
100,000 |
<=1016 |
对于前60%数据,所有n的和不超过30,000,000。
对于所有数据,n>=1。
注意输入规模对运行时间的影响。
考场脑洞:傻逼题,水水水水水水过
其实正解是二分答案。。。0.0 但是除以二,貌似...没问题?
#include<iostream>
#include<cstdio>
#include<cstring> #define ll long long using namespace std;
ll q,n,ans; inline ll init()
{
ll x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
freopen("ming.in","w",stdin);
freopen("ming.out","r",stdout);
q=init();
while(q--)
{
n=init();ans=;
while(n)
{
ans++;n/=;
}
printf("%d\n",ans);
}
fclose(stdin);fclose(stdout);
return ;
}
吸血鬼
吸血鬼们总是喜欢吸取人的血液,这一次,n个吸血鬼决定到h市吸取血液,但当他们进入h市准备血的狂欢的时候,却发现h市充满雾霾,他们找不着路,还彼此走散了……
当下之急自然是找到彼此,重新汇合商量对策。刚进来的时候,吸血鬼失去了彼此的联系。他们决定用血建立直接的联系,这种联系不会因为h市的雾霾而中断,且能够及时地传递信息。在吸血鬼寻找彼此的时候,任意2个吸血鬼可能会恰巧碰面,并且建立血的联系,除非在碰面以前他们就已经有直接或间接的联系了。如果将吸血鬼抽象成节点,那么任意2个节点之间可能会建立一条边,除非这2个节点已经连通。
我们知道,经过足够长的时间以后,吸血鬼们通过m次碰面,已经全部连在一起,并成功地洗劫了h市。
但是,假设吸血鬼按照地位给予从1到n的编号,我们还想要知道,在这个过程中以血的联系构建的通信网络中,编号1的大佬联络每个吸血鬼各需要经过多少个其他吸血鬼。
输入格式
第一行2个数字n,m,为题目中对应的意义。
接下来m行,由于上帝在整理时间轴的问题上偷懒了,所以给出来的n次碰面没有按照时间顺序排序。
每行3个整数,t,u,v,表示在时刻t,编号为u和v的吸血鬼碰面了。
保证时刻t互不相同。且到最后吸血鬼总能够直接或间接地联络其他所有吸血鬼。
数字之间以空格隔开。
输出格式
输出m-1行,每行一个数字,第i行的数字表示从1号吸血鬼联络i+1号吸血鬼需要多少个其他吸血鬼,如果直接相连,输出0。
输入样例 |
输出样例 |
5 6 1 2 10 3 5 7 2 5 2 1 5 19 3 2 5 4 5 13 |
0 1 2 1 |
样例解释
一开始每个点不连通,在时刻2,2号和5号碰面并建立联系,在时刻5,2号和3号碰面并建立联系,在时刻7,3号和5号碰面,然而它们已经可以互相联络,故不需要建立联系,之后建立联系的依次还有1号和2号,4号和5号。因此1号能够直接联系2号,但是联系4号必须依次经过2号和5号。
数据范围
数据编号 |
n |
m |
数据编号 |
n |
m |
1 |
5 |
6 |
6 |
30000 |
50000 |
2 |
100 |
300 |
7 |
50000 |
80000 |
3 |
500 |
800 |
8 |
100000 |
160000 |
4 |
1000 |
5000 |
9 |
200000 |
199999 |
5 |
20000 |
30000 |
10 |
300000 |
500000 |
考场脑洞:按时间排序+并查集维护+建图+以1为根dfs处理深度(1s好像悬)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define maxn 500005 using namespace std;
int fa[maxn],deep[maxn],head[maxn],vis[maxn];
int cnt,num,n,m,ans,x,y,t;
struct edge
{
int u,v,next;
}e[maxn<<];
struct node
{
int x,y,t;
}a[maxn<<]; inline int init()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} inline void add(int u,int v)
{
e[++num].v=v;e[num].next=head[u];head[u]=num;
} int find(int x)
{
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
} bool cmp(node a,node b)
{
return a.t<b.t;
} void dfs(int now,int c)
{
deep[now]=c;vis[now]=;
for(int i=head[now];i;i=e[i].next)
{
int v=e[i].v;
if(!vis[v]) dfs(v,c+);
}
} int main()
{
// freopen("vamp.in","w",stdin);
//freopen("vamp.out","r",stdout);
freopen("ai.in","r",stdin);
freopen("aaa.out","w",stdout);
n=init();m=init();
for(int i=;i<=m;i++)
{
a[i].x=init();
a[i].y=init();
a[i].t=init();
}
sort(a+,a+m+,cmp);
for(int i=;i<=n;i++)
fa[i]=i;
for(int i=;i<=m;i++)
{
int r1=find(a[i].x);
int r2=find(a[i].y);
if(r1!=r2)
{
fa[r2]=r1;
add(a[i].x,a[i].y);add(a[i].y,a[i].x);
}
}
dfs(,);
for(int i=;i<=n;i++)
printf("%d\n",deep[i]-);
fclose(stdin);fclose(stdout);
return ;
}
90分(TLE)
正解:最小生成树+bfs
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib> using namespace std; struct E { int u,v,t; };
E ed[];
int next[],to[];
int fir[],ans[],from[]; int rk[],fa[];
int q[]; int n,m,i,e,h,t,u;
int edges;
int tu,tv; bool cmp(const E &a,const E &b)
{ return a.t<b.t; } int top(int x)
{
return fa[x]==x?x:fa[x]=top(fa[x]);
} void edgeins(int a,int b)
{
next[edges]=fir[a];
fir[a]=edges;
to[edges]=b;
edges++;
next[edges]=fir[b];
fir[b]=edges;
to[edges]=a;
edges++;
} int main()
{
freopen("vamp.in","r",stdin);
freopen("vamp.out","w",stdout); scanf("%d%d",&n,&m);
for (i=;i<m;i++)
{
scanf("%d%d%d",&ed[i].u,&ed[i].v,&ed[i].t);
} sort(ed,ed+m,cmp); for (i=;i<=n;i++)
fa[i]=i,rk[i]=; edges=;
for (i=;i<m;i++)
{
tu=top(ed[i].u);
tv=top(ed[i].v);
if (tu==tv) continue;
if (rk[tu]==rk[tv]) rk[tu]++;
if (rk[tu]<rk[tv]) swap(tu,tv);
fa[tv]=tu;
edgeins(ed[i].u,ed[i].v);
} q[]=; t=;
ans[]=-;
for (h=;h<t;h++)
{
u=q[h];
for (e=fir[u];e!=;e=next[e])
if (to[e]!=from[u])
{
from[to[e]]=u;
ans[to[e]]=ans[u]+;
q[t++]=to[e];
}
} for (i=;i<=n;i++)
printf("%d\n",ans[i]); return ;
}
鱼的感恩
从前有一个渔夫抓到了一条特别的鱼,放走了。
渔夫再次抓到了这条鱼,正要再次放走之时,这条鱼吐出了一片迷雾,迷雾散去以后,渔夫不见了。
渔夫睁开眼,发现自己到了一个石碑面前,碑上有一行小写英文字符串S,下面写着:“汝等既有护生之念,应是善良之人,理当授以嘉奖。但是为了证明你的善良,你需要展现你的智慧,以确保吾所见之善良,并非出于汝之愚笨。上面的字符串,你若于其中找到最长的子串,使得这个子串既出现在前缀,又出现在后缀,还出现在字符串的中间,也就是既非前缀又非后缀的位置,则该石碑会将其所藏之物拱手相送。”
渔夫听完以后,可谓一脸懵逼,遂将这个问题分享给你,希望你能够解决。若能解决,渔夫愿意拿出10,000,000,000,000 mod 250 元,作为解决这个问题的报酬。
输入格式
第一行是一个数字q,表示这个问题有q组不同问题。
接下来q行每行一个由小写英文字母组成的字符串S,意义见于上文。
输出格式
输出共q行,每行一个字符串,表示对于每组问题,所求的字符串,如果不存在长度大于0且满足要求的字符串,就改成输出”---”(不包含引号)
输入样例 |
1 niconiconi |
2 abcdabc ababacaba |
输出样例 |
ni |
--- aba |
样例解释 |
ni既是字符串的前缀,还是字符串的后缀,而且在字符串的中间(字符串第5位开始)也能找到ni |
第一个字符串不存在这样的子串,而aba除了前缀和后缀以外从第3位开始也能找到,也就是说允许和前后缀部分重叠。 |
数据范围
设n为测试点中单个S的长度的最大值,m为测试点中S的长度之和。
前10%的数据,q<=10,n<=100,m<=1,000
前30%的数据,q<=30,n<=500,m<=15,000
前50%的数据,q<=100,n<=2,000,m<=200,000
所有数据,q<=200,000,n<=100,000,m<=10,000,000
考场脑洞:正解一定非hash!(好吧是我写的不熟练),然后一眼秒过;这不是kmp的next数组么(又秒了一道题好开心。。。)
然后就开始写写写...2h+并没有写出来,漏洞百出...然后考完后就迷茫了......是不是自己还是太弱了!!!!!!!
唉,最后究其根本是...自己不会输出一部分字符串......所以就只能奇技淫巧不断向前找next,然后不会处理呀....光荣暴0......
其实只需要在后面插个'0'然后printf就好了......
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib> using namespace std; int n,i,j,q,ti;
int next[];
char st[]; int getstr(char *st)
{
int ret=;
st[]=getchar();
while (st[]<'a'||st[]>'z') st[]=getchar();
while (st[ret]>='a'&&st[ret]<='z') st[++ret]=getchar();
st[ret]='\0';
return ret;
} int main()
{
freopen("fool10.in","r",stdin);
freopen("fool10.out","w",stdout); scanf("%d",&q);
for (ti=;ti<=q;ti++)
{
n=getstr(st+);
next[]=-; next[]=;
j=;
for (i=;i<=n;i++)
{
while (j>=&&st[i]!=st[j+]) j=next[j];
next[i]=++j;
}
for (i=;i<n;i++)
if (next[i]==j) break;
if (i==n) j=next[j];
if (j==) { printf("---\n"); continue; }
st[j+]='\0';
printf("%s\n",st+);
} return ;
}
期望得分:++=
实际得分:ZERO 我是不是很萌......
首先是以后freopen再打反就剁手...... 然后是基础知识不牢!回去一本通补起来(回炉重修)...... 最后是关于时间复杂度不大会算这个事......哪位大佬救救我? 这次题这么简单,noip哪里会有这样的题?!!!!这么简单都不能拿到手,更别说难题了!!!还有一个问题一定注意:如果感觉自己没有十足把握写出这道题,那就打暴力!!!!!!!!!!!!!!!!!!!!!!!!!!!
要养成这个习惯!还要养成对牌的习惯(回去开始练)!
自己所做的每一道题的得分都有可能是noip考场得分!切记不可疏忽!!
5.3QBXT模拟赛的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOI模拟赛 Day1
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...
- NOIP第7场模拟赛题解
NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 小奇模拟赛9.13 by hzwer
2015年9月13日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...
- PKUSC 模拟赛 day1 下午总结
下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...
- [GRYZ]寒假模拟赛
写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...
- BZOJ2741: 【FOTILE模拟赛】L
2741: [FOTILE模拟赛]L Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1170 Solved: 303[Submit][Status] ...
随机推荐
- [HNOI]2003 消防局的建立
消防局的建立 本题地址:http://www.luogu.org/problem/show?pid=2279 题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料 ...
- numpy.random模块常用函数解析
numpy.random模块中常用函数解析 numpy.random模块官方文档 1. numpy.random.rand(d0, d1, ..., dn)Create an array of the ...
- http怎么做自动跳转https
Nginx版本 server { listen 80; server_name localhost; rewrite ^(.*)$ https://$host$1 permanent; ...
- CCF201709-1 打酱油 java(100分)
试题编号: 201709-1 试题名称: 打酱油 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明带着N元钱去买酱油.酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每 ...
- 【Codeforces 979B】Treasure Hunt
[链接] 我是链接,点我呀:) [题意] 每次你可以将一个字符变成一个不同于本身的字符. 每个人需要改变n次(且不能不改变) 设每个人的字符串中出现次数最多的字符出现的次数为cnt[0~2] 问你谁的 ...
- jquery ajax报Uncaught TypeError :Illegal invocation
使用jquery ajax异步提交的时候报Uncaught TypeError :Illegal invocation错误,报错信息如图: 上网查了一下jquery的这个错误,导致这个错误的原因有俩点 ...
- [UOJ48] 核聚变反应强度
QUQ 思路 求出a1的所有约数,与a1.ai放入同一数组: 求出gcd(a1,ai): 枚举约数,得出ans; 代码实现 #include<cmath> #include<cstd ...
- 生产(production)
[题目描述] 工厂为了生产一种复杂的产品,给各个生产部门制定了详细的生产计划.那么,就经常会有生产部门要把产品送到另一个生产部门作为原料.这是一个注重产品质量的工厂,所以每当有产品要从A部门运到B部门 ...
- 基于QQ服务器JavaMail邮箱SSL密码第三方发送邮件
网上javaMail邮箱推送代码太多,大都是有缺陷的,今天做项目刚好要用到,于是发了大半天的时间解决的这个问题. jar包:javax.mail.jar 代码: import java.io.IOEx ...
- Hive之单独部署机器
环境说明 CentOS7,hadoop-2.6.5,hive-1.2.2,MariaDB-5.5.60,jdk-1.8 假设hive机已经安装好了MariaDB(已启动且已创建好hive账号,对hiv ...