T1:小X的质数

小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感。小 X 认为,质数是一切自然数起源的地方。

在小 X 的认知里,质数是除了本身和 1 以外,没有其他因数的数字。

但由于小 X 对质数的热爱超乎寻常,所以小 X 同样喜欢那些虽然不是质数,但却是由两个质数相乘得来的数。

于是,我们定义,一个数是小 X 喜欢的数,当且仅当其是一个质数,或是两个质数的乘积。

而现在,小 X 想要知道,在 L 到 R 之间,有多少数是他喜欢的数呢?

输入格式

第一行输入一个正整数 Q,表示询问的组数。

接下来 Q行。包含两个正整数 L 和 R。保证 L≤R。

输出格式

输出 Q 行,每行一个整数,表示小 X 喜欢的数的个数。

数据范围与约定

样例解释 1

666 以内的质数有 2,3,5,而 4=2∗2,6=2∗3。因此 2,3,4,5,6 都是小 X 喜 欢的数,而 1 不是。

样例输入1

1
1 6

样例输出1

5

样例输入2

10
282 491
31 178
645 856
227 367
267 487
474 697
219 468
582 792
315 612
249 307

样例输出2

97
78
92
65
102
98
114
90
133
29

样例输入3

10
20513 96703
15236 86198
23185 78205
40687 48854
42390 95450
63915 76000
36793 92543
35347 53901
44188 76922
82177 90900

样例输出3

24413
23001
17784
2669
16785
3833
17712
6028
10442
2734 T2:小X的密室

小 X 正困在一个密室里,他希望尽快逃出密室。

密室中有 N 个房间,初始时,小 X 在 1 号房间,而出口在 N 号房间。

密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条从房间 X 到房间 Y 的通道。另外,想要通过某个传送门,就必须具备一些种类的钥匙(每种钥匙都要有才能通过)。幸运的是,钥匙在打开传送门的封印后,并不会消失。

然而,通过密室的传送门需要耗费大量的时间,因此,小 X 希望通过尽可能少的传送门到达出口,你能告诉小 X 这个数值吗?

另外,小 X 有可能不能逃出这个密室,如果是这样,请输出 "No Solution"

输入格式

第一行三个整数 N,M,K,分别表示房间的数量、传送门的数量以及钥匙的种类数。

接下来 N 行,每行 K 个 0 或 1,若第 iii 个数为 1,则表示该房间内有第 iii 种钥匙,若第 iii 个数为 0,则表示该房间内没有第 iii 种钥匙。

接下来 M 行,每行先读入两个整数 X,Y,表示该传送门是建立在 X 号房间,通向 Y 号房间的,再读入 K 个 0 或 1,若第 iii 个数为 1,则表示通过该传送门需要 iii 种钥匙,若第 iii 个数为0,则表示通过该传送门不需要第 iii 种钥匙。

输出格式

输出一行一个 "No Solution",或一个整数,表示最少通过的传送门数。

数据规模与约定

更多测试样例

输入样例 4

输出样例 4

样例输入1

3 3 2
1 0
0 1
0 0
1 3 1 1
1 2 1 0
2 3 1 1

样例输出1

2

样例输入2

20 40 0
10 18
18 14
19 13
4 14
13 10
5 18
14 1
13 13
10 16
19 11
11 15
10 18
5 8
12 19
7 8
18 6
14 5
9 5
2 17
13 14
18 15
8 18
7 1
13 5
4 6
17 4
1 4
10 10
13 8
19 2
4 9
3 3
5 10
17 5
12 8
19 11
3 16
17 10
18 16
13 13

样例输出2

No Solution

样例输入3

20 50 0
8 10
7 17
5 11
14 20
20 16
8 19
12 11
18 7
17 5
4 15
16 11
11 8
10 12
8 9
16 8
3 16
1 6
3 20
6 10
11 12
6 8
18 17
14 17
3 11
4 19
9 2
8 6
13 2
5 2
12 19
8 10
14 7
6 12
6 4
13 2
8 7
13 19
17 9
3 14
18 20
2 14
4 17
20 15
14 15
2 15
7 20
12 12
18 10
15 9
15 9

样例输出3

4
T3:小X的佛光

小 X 是远近闻名的学佛,平日里最喜欢做的事就是蒸发学水。

小 X 所在的城市 X 城是一个含有 N 个节点的无向图,同时,由于 X 国是一个发展中国家,为了节约城市建设的经费,X 国首相在建造 X 城时只建造 N – 1 条边,使得城市的各个地点能够相互到达。

小 X 计划蒸发 Q 天的学水,每一天会有一名学水从 A 地走到 B 地,并在沿途各个地点留下一个水塘。此后,小 X 会从 C 地走到 B 地,并用佛光蒸发沿途的水塘。由于 X 城是一个学佛横行的城市,学水留下的水塘即使没有被小 X 蒸发,也会在第二天之前被其他学佛蒸发殆尽。

现在,小 X 想要知道,他每一天能够蒸发多少水塘呢?

输入格式

第一行三个整数 N,Q,num,分别表示 X 城地点的个数,小 X 蒸发学水的天数,以及测试点编号。注意,测试点编号是为了让选手们更方便的获得部分分,你可能不需要用到这则信息,在下发的样例中,测试点编号的含义是该样例满足某一测试点限制。

接下来 N – 1 行,每行两个整数 X,Y,表示 X 地与 Y 地之间有一条边。

接下来 Q 行,每行三个整数 A,B,C,表示一天中,有一名学水从 A 地走到 B 地,而小 X 会从 C 地走到 B 地。

输出格式

输出 Q 行,每行一个整数,表示小 X 能够蒸发的水塘数。

数据规模与约定

特殊性质 1:第 i 条边连接第 i 和第 i+1个地点。

特殊性质 2:A=C。

更多测试样例

样例输入 2

样例输出 2

样例输入 3

样例输出 3

样例输入 4

样例输出 4


样例输入

3 3 1
1 2
2 3
1 2 3
1 1 3
3 1 3

样例输出

1
1
3

T1:
将线性筛数变形即可
可见线性筛数既可以筛质数,也可以顺便判断质数的一些情况

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MAXN 10000001
using namespace std;
int prime[MAXN],cnt;
bool b[MAXN];
bool c[MAXN];
int f[MAXN];
int main()
{
// freopen("data.in","r",stdin);
b[]=;
for(int i=;i<MAXN;i++){
if(!b[i]){
prime[++cnt]=i;
}
for(int j=;j<=cnt&&i*prime[j]<MAXN;j++){
b[i*prime[j]]=;
c[i*prime[j]]+=(!b[i]);
if(i%prime[j]==){
break;
}
}
}
for(int i=;i<MAXN;i++){
f[i]=f[i-];
if(!b[i]||c[i]){
f[i]++;
}
}
int Q;
scanf("%d",&Q);
for(int i=;i<=Q;i++){
int L,R;
scanf("%d%d",&L,&R);
printf("%d\n",f[R]-f[L-]);
}
return ;
}

Code1

T2:

由于每条边的边权都是1,宽搜即可

钥匙用二进制存贮,然后可以预处理下子集即可高效判断

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#define MAXN 5005
#define MAXM 6005
#define INF 0x7f7f7f7f
using namespace std;
int qL[],qK[],L=,R;
int d[MAXN][];
int n,m,k;
int key_room[MAXN];
int first[MAXN],Next[MAXM],to[MAXM],w[MAXM],cnt;
//single edge
int bel[][];
void Add(int x,int y,int key){
Next[++cnt]=first[x];first[x]=cnt;to[cnt]=y;w[cnt]=key;
}
void bfs(){
memset(d,0x7f,sizeof(d));
qL[++R]=;
qK[R]=key_room[];
d[qL[R]][qK[R]]=;
while(L<=R){
int p=qL[L],key=qK[L];L++;
int D=d[p][key];
for(int i=first[p];i;i=Next[i]){
int j=to[i];
if(!bel[key][w[i]]) continue;
int dk=(key|key_room[j]);
if(d[j][dk]>D+){
d[j][dk]=D+;
qL[++R]=j;
qK[R]=dk;
if(n==j){
printf("%d\n",d[j][dk]);
return ;
}
}
}
}
printf("No Solution\n");
}
int main()
{
// freopen("data.in","r",stdin);
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++){
for(int j=;j<k;j++){
int c;
scanf("%d",&c);
key_room[i]+=(c<<j);
}
}
for(int i=;i<=m;i++){
int x=,y=,need=;
scanf("%d%d",&x,&y);
for(int j=;j<k;j++){
int c;
scanf("%d",&c);
need+=(c<<j);
}
Add(x,y,need);
}
bel[][]=;
for(int i=;i<(<<k);i++){
for(int j=i;;j=i&j){
bel[i][j]=;
j--;
if(j<){
break;
}
}
}
bfs();
return ;
}

Code2

T3:

裸LCA

注意下分类讨论

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MAXN 200005
#define LOG 21
using namespace std;
int n,num;
int first[MAXN],Next[MAXN*],to[MAXN*],cnt;
int dep[MAXN];
int fa[LOG][MAXN];
//double edge
void Add(int x,int y){
Next[++cnt]=first[x];first[x]=cnt;to[cnt]=y;
Next[++cnt]=first[y];first[y]=cnt;to[cnt]=x;
}
void dfs(int x){
for(int e=first[x];e;e=Next[e]){
int y=to[e];
if(y==fa[][x]){
continue;
}
fa[][y]=x;
dep[y]=dep[x]+;
dfs(y);
}
}
int lca(int x,int y){
if(dep[x]<dep[y]){
swap(x,y);
}
for(int i=dep[x]-dep[y],p=;i;i>>=,p++){
if(i&){
x=fa[p][x];
}
}
if(x==y){
return x;
}
for(int k=LOG-;k>=;k--){
if(fa[k][x]!=fa[k][y]){
x=fa[k][x];
y=fa[k][y];
}
}
return fa[][x];
}
int dist(int x,int y){
int LCA=lca(x,y);
return dep[x]-dep[LCA]+dep[y]-dep[LCA];
}
int main()
{
int T;
scanf("%d%d%d",&n,&T,&num);
for(int i=;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
Add(x,y);
}
dfs();
for(int k=;k<LOG;k++){
for(int i=;i<=n;i++){
fa[k][i]=fa[k-][fa[k-][i]];
}
}
for(int i=;i<=T;i++){
int A,B,C;
scanf("%d%d%d",&A,&B,&C);
printf("%d\n",(dist(B,A)+dist(B,C)-dist(A,C))/+);
}
return ;
}

Code3

计蒜客NOIP2017提高组模拟赛(四)day1的更多相关文章

  1. 计蒜客NOIP2017提高组模拟赛(三)day1

    火山喷发 火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 n 个生物分别具有 A​1​​,A​2​​,⋯,A​n​​点生命值,一次火山喷发总计 MM 轮 ...

  2. 计蒜客NOIP2017提高组模拟赛(五)day1-展览

    传送门 发现这题选或不选对状态的优劣程度不会产生影响,如果已经确定了两个数a和b,那么最优的首项和公比也都是唯一确定的, 与对于后面的数x,加进去也好不加进去也好,首项和公比依旧是原来的 于是我们用尺 ...

  3. 计蒜客NOIP2017提高组模拟赛(五)day1-机智的 AmyZhi

    传送门 很水的题目啦QAQ #include<cstdio> #include<cstdlib> #include<algorithm> #include<c ...

  4. 计蒜客NOIP2017提高组模拟赛(五)day2-蚂蚁搬家

    传送门 这题可以用线段树来维护 #include<cstdio> #include<cstdlib> #include<algorithm> #include< ...

  5. 计蒜客NOIP2017提高组模拟赛(五)day2-成绩统计

    传送门 用hash,因为map的复杂度可能在这题中因为多一个log卡掉,但是hash不会 可能因为这个生成的随机数有循环的情况,不是完全均匀的 而且这题hash表的长度也可以开的很大 #include ...

  6. 计蒜客NOIP2017提高组模拟赛(三)day2-数三角形

    传送门 这题有点坑啊 设A为两边颜色不同的角,B为两边颜色相同的角 那么考虑三种三角形:异色,同色,其他 对于任何一个异色三角形,一定会有三个颜色不同的角, 对于任何一个同色三角形,一定会有零个颜色不 ...

  7. 计蒜客NOIP2017提高组模拟赛(三)day2-直线的交点

    传送门 简单几何+逆序对 发现当两条直线甲乙与平板的交点在上面甲在较左的位置,那么下面甲在较右的位置就可以相交 然后把上面的位置排下序,下面离散化+树状数组即可 #include<cstdio& ...

  8. 计蒜客NOIP2017提高组模拟赛(三)day2-小区划分

    传送门 dp,注意边界 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cst ...

  9. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

随机推荐

  1. 团队作业4——第一次项目冲刺(Alpha版本) Day 2

    小队@JMUZJB-集美震惊部 一.Daily Scrum Meeting照片 二.Burndown Chart 燃尽图 三.项目进展 成员 工作 丘雨晨 环境配置 刘向东 数据库搭建,环境配置 江泽 ...

  2. C语言——第二次作业(2)

    作业要求一 PTA作业的提交列表 作业要求二 题目1.删除字符串中数字字符(函数题) 1.设计思路 - (1)算法 第一步:调用定义的函数. 第二步:定义i=0.j=0,i为原字符数组角标,j为删除后 ...

  3. Linux进程间通信--信号量

    信号量绝对不同于信号,一定要分清,关于信号,上一篇博客中已经说过,如有疑问,请移驾! 信号量 一.是什么   信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件 ...

  4. C实现单链表

    typedef int DataType; typedef struct ListNode { DataType data; struct ListNode* next; }ListNode; //初 ...

  5. cocos2d 判断旋转矩形是否包含某个点

    本来想画个图演示一下,但是折腾了一会发现画不好,我的win10系统没有安装office,以后再看的话再补上吧.不废话了. 如图所以,如果判断点P是否被矩形A所包含,非常容易.那么如果矩形A以中心点逆时 ...

  6. JAVA_SE基础——64.StringBuffer类 ①

     字符串特点:字符串是常量:它们的值在创建之后不能更改 字符串的内容一旦发生了变化,那么马上会创建一个新的对象. 注意:字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象. publ ...

  7. 逆向集录_00_不同程序OEP特征总结

    在分析/逆向 程序时,如果事先知道这类程序的一些特征,那将会是事半功倍的: 分析/逆向 程序,和写程序不同,比喻的话:写程序像在作案,分析/逆向 程序就像是在破案,对破案来讲,重在假想和推理: 特征1 ...

  8. linux下xargs和管道的区别

    管道将前面的标准输出作为后面的标准输入,xargs则将标准输入作为命令的参数 一.简介 1.背景 之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了x ...

  9. 配置ssh无密钥登陆

    ssh 无密码登录要使用公钥与私钥. linux下可以用用ssh-keygen生成公钥/私钥对,下面以CentOS为例. 有机器LxfN1(192.168.136.128),LxfN2(192.168 ...

  10. java将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    首先我们的算法是:例如 输入的是 90 1.找到90的最小公约数(1除外)是 2 2.然后把公约数 2 输出 3.接着用 90 / 2 = 45 (如果这里是素数,就结束,否则继续找最小公约数) 4. ...