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:
将线性筛数变形即可
可见线性筛数既可以筛质数,也可以顺便判断质数的一些情况

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<algorithm>
 4 #include<cstring>
 5 #define MAXN 10000001
 6 using namespace std;
 7 int prime[MAXN],cnt;
 8 bool b[MAXN];
 9 bool c[MAXN];
10 int f[MAXN];
11 int main()
12 {
13 //    freopen("data.in","r",stdin);
14     b[1]=1;
15     for(int i=2;i<MAXN;i++){
16         if(!b[i]){
17             prime[++cnt]=i;
18         }
19         for(int j=1;j<=cnt&&i*prime[j]<MAXN;j++){
20             b[i*prime[j]]=1;
21             c[i*prime[j]]+=(!b[i]);
22             if(i%prime[j]==0){
23                 break;
24             }
25         }
26     }
27     for(int i=1;i<MAXN;i++){
28         f[i]=f[i-1];
29         if(!b[i]||c[i]){
30             f[i]++;
31         }
32     }
33     int Q;
34     scanf("%d",&Q);
35     for(int i=1;i<=Q;i++){
36         int L,R;
37         scanf("%d%d",&L,&R);
38         printf("%d\n",f[R]-f[L-1]);
39     }
40     return 0;
41 }

Code1

T2:

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

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

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<vector>
 6 #define MAXN 5005
 7 #define MAXM 6005
 8 #define INF 0x7f7f7f7f
 9 using namespace std;
10 int qL[11000005],qK[11000005],L=1,R;
11 int d[MAXN][2050];
12 int n,m,k;
13 int key_room[MAXN];
14 int first[MAXN],Next[MAXM],to[MAXM],w[MAXM],cnt;
15 //single edge
16 int bel[2050][2050];
17 void Add(int x,int y,int key){
18     Next[++cnt]=first[x];first[x]=cnt;to[cnt]=y;w[cnt]=key;
19 }
20 void bfs(){
21     memset(d,0x7f,sizeof(d));
22     qL[++R]=1;
23     qK[R]=key_room[1];
24     d[qL[R]][qK[R]]=0;
25     while(L<=R){
26         int p=qL[L],key=qK[L];L++;
27         int D=d[p][key];
28         for(int i=first[p];i;i=Next[i]){
29             int j=to[i];
30             if(!bel[key][w[i]]) continue;
31             int dk=(key|key_room[j]);
32             if(d[j][dk]>D+1){
33                 d[j][dk]=D+1;
34                 qL[++R]=j;
35                 qK[R]=dk;
36                 if(n==j){
37                     printf("%d\n",d[j][dk]);
38                     return ;
39                 }
40               }
41         }
42     }
43     printf("No Solution\n");
44 }
45 int main()
46 {
47 //    freopen("data.in","r",stdin);
48     scanf("%d%d%d",&n,&m,&k);
49     for(int i=1;i<=n;i++){
50         for(int j=0;j<k;j++){
51             int c;
52             scanf("%d",&c);
53             key_room[i]+=(c<<j);
54         }
55     }
56     for(int i=1;i<=m;i++){
57         int x=0,y=0,need=0;
58         scanf("%d%d",&x,&y);
59         for(int j=0;j<k;j++){
60             int c;
61             scanf("%d",&c);
62             need+=(c<<j);
63         }
64         Add(x,y,need);
65     }
66     bel[0][0]=1;
67     for(int i=1;i<(1<<k);i++){
68         for(int j=i;;j=i&j){
69             bel[i][j]=1;
70             j--;
71             if(j<0){
72                 break;
73             }
74         }
75     }
76     bfs();
77     return 0;
78 }

Code2

T3:

裸LCA

注意下分类讨论

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<algorithm>
 4 #include<cstring>
 5 #define MAXN 200005
 6 #define LOG 21
 7 using namespace std;
 8 int n,num;
 9 int first[MAXN],Next[MAXN*2],to[MAXN*2],cnt;
10 int dep[MAXN];
11 int fa[LOG][MAXN];
12 //double edge
13 void Add(int x,int y){
14     Next[++cnt]=first[x];first[x]=cnt;to[cnt]=y;
15     Next[++cnt]=first[y];first[y]=cnt;to[cnt]=x;
16 }
17 void dfs(int x){
18     for(int e=first[x];e;e=Next[e]){
19         int y=to[e];
20         if(y==fa[0][x]){
21             continue;
22         }
23         fa[0][y]=x;
24         dep[y]=dep[x]+1;
25         dfs(y);
26     }
27 }
28 int lca(int x,int y){
29     if(dep[x]<dep[y]){
30         swap(x,y);
31     }
32     for(int i=dep[x]-dep[y],p=0;i;i>>=1,p++){
33         if(i&1){
34             x=fa[p][x];
35         }
36     }
37     if(x==y){
38         return x;
39     }
40     for(int k=LOG-1;k>=0;k--){
41         if(fa[k][x]!=fa[k][y]){
42             x=fa[k][x];
43             y=fa[k][y];
44         }
45     }
46     return fa[0][x];
47 }
48 int dist(int x,int y){
49     int LCA=lca(x,y);
50     return dep[x]-dep[LCA]+dep[y]-dep[LCA];
51 }
52 int main()
53 {
54     int T;
55     scanf("%d%d%d",&n,&T,&num);
56     for(int i=1;i<n;i++){
57         int x,y;
58         scanf("%d%d",&x,&y);
59         Add(x,y);
60     }
61     dfs(1);
62     for(int k=1;k<LOG;k++){
63         for(int i=1;i<=n;i++){
64             fa[k][i]=fa[k-1][fa[k-1][i]];
65         }
66     }
67     for(int i=1;i<=T;i++){
68         int A,B,C;
69         scanf("%d%d%d",&A,&B,&C);
70         printf("%d\n",(dist(B,A)+dist(B,C)-dist(A,C))/2+1);
71     }
72     return 0;
73 }

Code3

转载于:https://www.cnblogs.com/w-h-h/p/7623588.html

计蒜客NOIP2017提高组模拟赛(四)day1相关推荐

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

    传送门 dp,注意边界 1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #includ ...

  2. NOIP2017提高组模拟赛4 (总结)

    NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...

  3. [NowCoder牛客]2021NOIP提高组模拟赛第二场T3——树数树(启发式合并堆)

    树数树 description solution code description [题目描述] 牛牛有一棵 n 个点的有根树,根为 1. 我们称一个长度为 m 的序列 a 是好的,当且仅当: • ∀

  4. 牛客网提高组模拟赛第七场 T3 洞穴(附bitset介绍)

    就是DP. 我们可以很简单的想到要枚举中间点,进行边数的转移. 但是因为边长数据范围很大,所以我们考虑log的倍增. 状态设计为\(dp[i][j][k]\),为从节点\(i\)走\(2^k\)步能否 ...

  5. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  6. 计蒜客2019蓝桥杯省赛B组模拟赛(一)题目及解析

    蓝桥杯历年真题题目及题解目录汇总   A. 结果填空:钟表 题库链接 分值: 5 一天蒜头君 22:28:45 开始睡觉,06:24:26 醒来之后,蒜头君在想,今天我睡了多久? 请你告诉蒜头君睡了& ...

  7. 计蒜客 2020 蓝桥杯省赛 B 组模拟赛(五)E区间dp H 裴蜀 J dp A-J 权值线段树

    题目链接 因为要去笔试.所以只打了两个小时,有点求快,很多细节没写好就匆匆交,而且没有检查,打的有点菜 C-煎牛排 做法: 所有的面的个数sum=2*n   然后sum/(2*k)即可. ans=ma ...

  8. 计蒜客 2019 蓝桥杯省赛 B 组模拟赛(一)

    D题:马的管辖 二进制枚举方案.判断该方案是否全部能被覆盖,将最优方案存下来并进行剪枝. #include<iostream> #include<cstring> #inclu ...

  9. 计蒜客 2019 蓝桥杯省赛 A 组模拟赛(一) B:炮台实验

    题目描述 蒜头君在玩一个战争模拟游戏,他有高度为 1,2,3,-,n 的炮台各一个,他需要把这 n 个炮台从左往右排成一行,并且炮口都朝向右边. 在这个游戏中,所有炮台发射的炮弹会摧毁前方所有高度比自 ...

最新文章

  1. MongoDB3.4安装及卸载
  2. mysql的索引介绍_1
  3. Git/SQL/正则表达式练习平台
  4. Linux基础系列:常用命令(5)_samba服务与nginx服务
  5. 2011 ICM 美国数据建模赛题
  6. 轻量版 markdown博客_如何快速搭建自己的博客平台
  7. jQuery监听文本框值改变触发事件(propertychange)
  8. 制作GHOST XP 基于自由天空驱动包+SysPacker 2.1
  9. 机器学习基础(三十三)—— 皮尔逊相关度评价
  10. 具体数学-第11课(Stern-Brocot树和同余关系)
  11. plsql 存储过程 批量提交_浅谈PetShop之使用存储过程与PLSQL批量处理(附案例)
  12. 2020 比特大陆 面经
  13. 韩立刚《计算机网络》| 第5章 传输层
  14. 详解Vant组件的使用
  15. 遮羞布被撕,业界反思5G的冒进,运营商重视挖掘现有5G网络的潜力
  16. 死链检查工具 Xenu
  17. 对学生公寓部建议和意见_关于进一步加强学生公寓管理工作的意见
  18. TinyMCE富文本编辑器在Vue中的使用
  19. 华为HarmonyOS鸿蒙2.0系统安装谷歌框架play商店GMS,mate30/40系列,p40,p50,nova5 6 7 8,荣耀30/40/50/magic3/9x
  20. 110配线架打法图解_110配线架打法图解 110配线架图片

热门文章

  1. 自制简单的小型Linux,自制小型Linux系统
  2. 电脑一开机出rebootand_北京联想电脑维修点【蓝伟博达笔记本维修吧】
  3. python偶数分解成两个素数之和_偶数 2021218918 ,有多少种方法分解成两个素数之和?...
  4. mysql in 多个字段_MySQL如何同时自增自减多个字段
  5. sap 一代增强_在SAP故乡,感受“边缘智能”之变
  6. mplab x ide 中文使用手册_中文文档:MPLAB ICD 4在线调试器用户指南
  7. 删除linux目录下一半的文件,Linux面试题(一):删除一个目录下的所有文件,但保留一个指定文件...
  8. java父类调用子类方法_Java 中父类怎么调用子类的方法?
  9. 计算机屏幕亮度调到多少合适,电脑屏幕的亮度和对比度调到多少比较合适,对眼睛伤害最小?有哪位高手了解?...
  10. IOS UITouch 触摸事件,UIResponder 的作用