A

构造题

有一个44的方格 每次放入一个横向12或竖向2*1的方格

满了一行或一列就会消掉

求方案

不放最后一行 这样竖行就不会消

然后竖着的放前两行 横着的放第三行 循环放就可以啦

  1. #include <cstdlib>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <cstring>
  6. const int N = 1e3 + 5;
  7. using namespace std;
  8. const int r[2][2] = {{3, 1}, {3, 3}};
  9. const int c[4][2] = {{1, 1}, {1, 2}, {1, 3}, {1, 4}};
  10. char str[N];
  11. int main(){
  12. scanf("%s", str + 1);
  13. int len = strlen(str + 1);
  14. int cntr = 0, cntc = 0;
  15. for(int i = 1; i <= len; ++i){
  16. if(str[i] == '1'){
  17. printf("%d %d\n", r[cntr][0], r[cntr][1]);
  18. ++cntr; if(cntr >= 2) cntr -= 2;
  19. }
  20. else {
  21. printf("%d %d\n", c[cntc][0], c[cntc][1]);
  22. ++cntc; if(cntc >= 4) cntc -= 4;
  23. }
  24. }
  25. return 0;
  26. }

B

这是一道交互题

有一个数a 现在你每次可以询问"? x y"

如果\(x \mod a >= y \mod a\) 那么返回"x" 否则返回"y"

如果得出结果 就输出"! a" a是猜到的值

多数据 每轮以start开头 end表示结束

每轮询问不能超过60次

\(a \leq 1e9\)

首先考虑特判1

用"? 0 1"就可以 (x表示是1)

现在已经知道不是1了 就用"? 1 2"来判

显然如果a == 2那么返回x

如果a >= 3那么返回y

依此类推 倍增就好啦 注意每次询问是左开右闭的

扩大到\(x \le a \leq y\)时 用同样的方法每次收拢\(frac{y - x}{2}\)个就好啦

直到y - x == 1此时y就是答案

1e9 < 2 ^ 30

再加上第一次特判 显然可过

C

给你一张没有重边自环的n个点m条边的无向图 还有一个常数k

保证每个点度数至少为3

要求完成下列任务之一即可 如果都无解输出-1

任务一:找到一条长度至少为\(\lfloor frac{n}{k} \rfloor\)的路径

任务二:找到k个环 每个环要求满足:

  • 1 长度至少为3
  • 2 长度不是3的倍数
  • 3 这个环里必须至少有一个点满足它只属于这个环 不属于其他环

    \(n, k \leq 2.5 * 10^5 m \leq 5 * 10^5\)

    HINT 标签:constructive algorithms, dfs and similar

首先任务一很好办啊 bfs一下纪录father就可以了

如果没有的话 任务二中显然如果有两个环有公共边 那么这两个环上的点都不能做representative - vertex

先把这张图tarjan一波

对于一个双连通分量 如果其中不是割点的点度数有大于2的 那么说明有多环

所以我们在找到一个强连通分量的时候

如果这个bc里面(所有点都是割点并且这些割点都不是单独的) 或者有不是割点的点度数大于2 那么弃掉它

否则这整个就是一个环(或者单点) 判断它是不是\(size \geq 3\)

如果是就可以输出

orz

  1. #include <cstdlib>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <queue>
  7. #include <vector>
  8. const int N = 5e5 + 5;
  9. using namespace std;
  10. struct Edge{
  11. int v, next;
  12. }edge[N << 1];
  13. int head[N], esize;
  14. inline void addedge(int x, int y){
  15. edge[++esize] = (Edge){y, head[x]}; head[x] = esize;
  16. }
  17. int n, m, k;
  18. int dfn[N], tim, dis[N], fa[N], mx;
  19. vector<int> cyc, leaf, son;
  20. bool vis[N];
  21. void dfs(int x, int ff){
  22. dfn[x] = ++tim, dis[x] = dis[ff] + 1, fa[x] = ff;
  23. if(dis[mx] < dis[x]) mx = x;
  24. vis[x] = 1;
  25. bool lf = 1;
  26. for(int i = head[x], vv; ~i; i = edge[i].next){
  27. vv = edge[i].v; if(vis[vv]) continue;
  28. dfs(vv, x);
  29. lf = 0;
  30. }
  31. if(lf) leaf.push_back(x);
  32. }
  33. int main(){
  34. memset(head, -1, sizeof(head));
  35. scanf("%d%d%d", &n, &m, &k);
  36. for(int i = 1, x, y; i <= m; ++i){
  37. scanf("%d%d", &x, &y);
  38. addedge(x, y), addedge(y, x);
  39. }
  40. dfs(1, 0);
  41. if(dis[mx] > (n / k)){
  42. printf("PATH\n%d\n", dis[mx]);
  43. while(mx)
  44. printf("%d ", mx), mx = fa[mx];
  45. }
  46. else {
  47. printf("CYCLES\n");
  48. int cnt = 0;
  49. for(auto i : leaf){
  50. son.clear(); cyc.clear();
  51. for(int j = head[i]; ~j; j = edge[j].next) if(edge[j].v != fa[i]) son.push_back(edge[j].v);
  52. if((dis[i] - dis[son[0]]) % 3 != 2){
  53. //printf("%d %d\n", dis[i], dis[son[0]]);
  54. int j = i;
  55. while(j != son[0]) cyc.push_back(j), j = fa[j];
  56. cyc.push_back(j);
  57. }
  58. else if((dis[i] - dis[son[1]]) % 3 != 2){
  59. int j = i;
  60. while(j != son[1]) cyc.push_back(j), j = fa[j];
  61. cyc.push_back(j);
  62. }
  63. else {
  64. //printf("*");
  65. if(dis[son[0]] < dis[son[1]]) swap(son[0], son[1]);
  66. cyc.push_back(i);
  67. int j = son[0];
  68. while(j != son[1]) cyc.push_back(j), j = fa[j];
  69. cyc.push_back(j);
  70. }
  71. printf("%d\n", cyc.size());
  72. for(auto j : cyc) printf("%d ", j);
  73. printf("\n");
  74. if(++cnt == k) break;
  75. }
  76. }
  77. return 0;
  78. }

D

这道题如果所有数的最大公约数为一

那当然不用管了 输出零就好

\(2 * 3 * 5 * 7 * 11 * ... * 31 = 200560490130 \ge 10^12\)

这样的话最多gcd有11种质因数

那么对于一种质因数 要消掉它的话 就要把任一个数消掉这种这种质因数

所以这么说最多只需要消掉11个数

只有十一个? 考虑状压dp

f[i][S] = 最小的被消掉的数的权值之和 之所以有i那一位是为了统计用了多少个数 就像背包一样

有可能一个数被消掉的不只是一个质因数 那怎么办?

这个时候我们先处理出这个数中(gcd包含的那些质因数)的幂的乘积

也可以把它塞进一个map 这样是为了不重复处理一个数的质因数集合

Codeforces Round #534 (Div. 1)的更多相关文章

  1. Codeforces Round #534 (Div. 2) D. Game with modulo(取余性质+二分)

    D. Game with modulo 题目链接:https://codeforces.com/contest/1104/problem/D 题意: 这题是一个交互题,首先一开始会有一个数a,你最终的 ...

  2. CF1103D Codeforces Round #534 (Div. 1) Professional layer 状压 DP

    题目传送门 https://codeforces.com/contest/1103/problem/D 题解 失去信仰的低水平选手的看题解的心路历程. 一开始看题目以为是选出一些数,每个数可以除掉一个 ...

  3. CF1103C Johnny Solving (Codeforces Round #534 (Div. 1)) 思维+构造

    题目传送门 https://codeforces.com/contest/1103/problem/C 题解 这个题还算一个有难度的不错的题目吧. 题目给出了两种回答方式: 找出一条长度 \(\geq ...

  4. Codeforces Round #534 (Div. 2)D. Game with modulo-1104-D(交互+二分+构造)

    D. Game with modulo time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. Codeforces Round #534 (Div. 2)

    B. Game with string 题意: 给出一个字符串s只包括小写字母.当轮到一个玩家的时候,他可以选择两个连续且相等的字母并且删除它.当一个玩家没得删的时候他就输了. 题解: 乍一看有点懵, ...

  6. Codeforces Round #534 (Div. 2) Solution

    A. Splitting into digits Solved. #include <bits/stdc++.h> using namespace std; int n; void sol ...

  7. [ACM]Codeforces Round #534 (Div. 2)

    A. Splitting into digits Vasya has his favourite number n. He wants to split it to some non-zero dig ...

  8. Codeforces 1104 D. Game with modulo-交互题-二分-woshizhizhang(Codeforces Round #534 (Div. 2))

    D. Game with modulo time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. Codeforces Round #534 (Div. 2) D. Game with modulo 交互题

    先二分一个区间,再在区间里面二分即可: 可以仔细想想,想明白很有意思的: #include<iostream> #include<cstdio> #include<alg ...

随机推荐

  1. jQuery(一)、核心

    我认为,学习一门语言,主要是掌握它的思想与用途,就好比谈恋爱一样,你只要猜测到了对方的想法,就能够知情达意.废话不多说,我们开始今天学习的进度,加油ヾ(◍°∇°◍)ノ゙ 1. jQuery([sele ...

  2. javascript中Date常用方法

    一.Date的构造函数 有四种形式的Date构造函数: //1.构造函数没有参数,则返回当前日期的Date对象 var now=new Date(); //2.构造函数的参数为日期的毫秒数,返回距离1 ...

  3. MySQL中SELECT语句简单使用

    最近开始复习mysql,查漏补缺吧. 关于mysql 1.MySQL不区分大小写,但是在MySQL 4.1及之前的版本中,数据库名.表名.列名这些标识符默认是区分大小写的:在之后的版本中默认不区分大小 ...

  4. 微信公众号签名错误 invalid signature

    在出现了 invalid signature签名错误后按照以下步骤进行校验1.确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=j ...

  5. C语言经典算法 - 多维矩阵转一维矩阵的代码

    下边内容内容是关于C语言经典算法 - 多维矩阵转一维矩阵的内容,应该能对码农也有好处. #include <stdio.h>#include <stdlib.h>int mai ...

  6. curl 命令-接口测试

    在linux/Unix 为代表的os上, 对后端进行测试, 模拟连接请求都会书写脚本 场景: 在Linux 上接口测试工具有ab, restClient, postman等, 最常用的方法是curl进 ...

  7. 为什么作为下游的WSUS更新服务器总有一直处于下载状态的文件

    /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-ts ...

  8. Java基础系列--04_数组

    一维数组: (1)数组:存储同一种数据类型的多个元素的容器. (2)特点:每一个元素都有编号,从0开始,最大编号是数组的长度-1. 编号的专业叫法:索引 (3)定义格式 A:数据类型[] 数组名;(一 ...

  9. 解释型语言VS编译型语言

    前言 计算机不能直接理解除机器语言以外的语言,所以只有把程序员编写的程序翻译成机器语言,计算机才能够执行程序. 将其他语言翻译成机器语言的工具,被称之为:编译器. 编译器的翻译方式有两种:编译和解释. ...

  10. MyEclipse 的智能提示设置 使开发写代码的速度更快

    MyEclipse 是学习java 的人 最经常使用的IDE ,经常看到非常多人写代码的速度非常快.事实上他们大多数都使用了代码提示功能,代码提示有好有坏,好的方面就是使在项目开发中速度更快,不用去记 ...