Codeforces Round #534 (Div. 2) Solution
A. Splitting into digits
Solved.
#include <bits/stdc++.h>
using namespace std; int n; void solve()
{
printf("%d\n", n);
for (int i = ; i <= n; ++i) printf("%d%c", , " \n"[i == n]);
} int main()
{
while (scanf("%d", &n) != EOF)
solve();
return ;
}
B. Game with string
Solved.
#include <bits/stdc++.h>
using namespace std; #define N 100010
char s[N]; int main()
{
while (scanf("%s", s + ) != EOF)
{
stack <char> sta;
int cnt = ;
for (int i = , len = strlen(s + ); i <= len; ++i)
{
if (!sta.empty() && sta.top() == s[i]) sta.pop(), ++cnt;
else sta.push(s[i]);
}
puts(cnt & ? "Yes" : "No");
}
return ;
}
C. Grid game
Solved.
#include <bits/stdc++.h>
using namespace std; #define N 1010
char s[N]; int main()
{
while (scanf("%s", s + ) != EOF)
{
int x = , y = ;
for (int i = , len = strlen(s + ); i <= len; ++i)
{
if (s[i] == '')
{
printf("%d %d\n", , x % ? : );
++x;
}
else
{
printf("%d %d\n", , y % + );
++y;
}
}
}
return ;
}
D. Game with modulo
Solved.
题意:
交互题
猜数,猜一个$a$
每次询问格式为$(x, y)$
返回结果有两种
$x \;if (x \; mod\; a) >= (y \;mod\; a)$
$y \;if (x \;mod\; a) < (y \;mod\; a) $
思路:
我们考虑 从小到大倍增,去找到$a的一个单调范围$
比如说$1, 2, 4, 8, 16, 32 如果某一次询问中返回了x$
那么说明$a在询问的(x, y)范围中 并且2 \cdot a 不在这个范围内$
因为是从小到大进行倍增
那么我们考虑某一次询问是$(x, 2\cdot x)$
$a在其中$
$如果 a > x, 那么必然有x >= 2 \cdot x - a$
$如果a = x 那么必然有 x \;mod\;a = 2 \cdot x \;mod\; a$
那么这个区间就具有一个单调性,可以进行二分
#include <bits/stdc++.h>
using namespace std; char op[]; bool check(int x, int y)
{
printf("? %d %d\n", x, y);
fflush(stdout);
scanf("%s", op);
return op[] == 'y';
} void solve(int l, int r)
{
int base = ;
for (int i = l; i <= r; i += base, base <<= )
{
printf("? %d %d\n", i, i + base);
fflush(stdout);
scanf("%s", op);
if (op[] == 'x')
{
int l = i + , r = i + base - , res = -;
while (r - l >= )
{
int mid = (l + r) >> ;
if (check(i, mid))
{
l = mid + ;
res = mid;
}
else
{
r = mid - ;
}
}
if (res == -) res = i;
printf("! %d\n", res + );
fflush(stdout);
return;
}
} } int main()
{
while (scanf("%s", op) && op[] != 'e')
solve(, );
return ;
}
E. Johnny Solving
Upsolved.
题意:
给出一个无向图,没有重边和自环,每个点的度数至少是3
要求找出一个长度至少为$\frac{n}{k}的简单路径$
或者找出$至少k个环,每个环的长度至少为3,并且环的长度不被3整除,并且环中有一个点只属于这个环$
思路:
首先跑一棵$DFS树,如果某个叶子结点的深度>= \frac{n}{k} 那么直接输出这条简单路径$
$否则叶子结点个数肯定大于 k 个$
证明
$我们假设每个叶子结点到根节点的距离为x_1, x_2, \cdots x_c$
那么$x_1 + x_2 + \cdots + x_c >= n$
$那么根据抽屉原理 max(x_1, x_2, \cdots x_c) >= \frac{n}{c}$
$又 \frac {n}{c} < \frac{n}{k} 所以 c > k$
再考虑对于一个叶子结点u来说,它度数至少为$3$
$考虑 它的两条返祖边连向x, y 我们令deep[x] < deep[y]$
$那么这个时候有三个环 dist(x,u) + 1, dist(y, u) + 1, dist(x, y) + 2$
$首先证明三个环的长度都>= 3$
$因为没有重边,所以dist(x, u) 和 dist(y, u) >= 2 = 3 - 1$
$又x和y是不同的两点 所以 dist(x, y) >= 1 = 3 - 2$
$再证明三个环的长度至少有一个不被3整除$
$我们假设三个环的长度都被3整除,那么有$
$(dist(x, u) + 1) \% 3 == 0$
$(dist(y, u) + 1) \% 3 == 0$
$(dist(x, y) + 1) \% 3 == 0$
$又 dist(x, u) = (dist(y, u) + dist(x, y))$
$所以 dist(x, y) \% 3 == 0$
那么$(dist(x, y) + 2) \% 3 != 0$
$与已知矛盾, 得证$
#include <bits/stdc++.h>
using namespace std; #define N 300010
int n, m ,k;
vector <int> G[N]; int fa[N], vis[N], deep[N], Max, pos;
void DFS(int u)
{
vis[u] = ;
if (deep[u] > Max)
{
Max = deep[u];
pos = u;
}
for (auto v : G[u]) if (!vis[v])
{
fa[v] = u;
deep[v] = deep[u] + ;
DFS(v);
}
} vector < vector <int> > res;
int isleaf[N];
void work(int u)
{
vis[u] = ;
if (!isleaf[u])
{
if (res.size() >= k) return;
int x = -, y = -;
for (auto v : G[u]) if (v != fa[u])
{
if (x == -) x = v;
else if (y == -) y = v;
else break;
}
if (deep[x] > deep[y]) swap(x, y);
vector <int> tmp; int it = -, top = -;
if ((deep[u] - deep[y] + ) % )
{
it = u; top = fa[y];
}
else if ((deep[u] - deep[x] + ) % )
{
it = u; top = fa[x];
}
else
{
tmp.push_back(u);
it = y; top = fa[x];
}
while (it != top) tmp.push_back(it), it = fa[it];
res.push_back(tmp);
}
else for (auto v : G[u]) if (!vis[v]) work(v);
} int main()
{
while (scanf("%d%d%d", &n, &m, &k) != EOF)
{
for (int i = ; i <= n; ++i) G[i].clear();
for (int i = , u, v; i <= m; ++i)
{
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
deep[] = ; Max = ;
fa[] = ;
DFS();
if (Max > n / k)
{
puts("PATH");
vector <int> res;
int it = pos;
while (it)
{
res.push_back(it);
it = fa[it];
}
int len = res.size();
printf("%d\n", len);
for (int i = ; i < len; ++i) printf("%d%c", res[i], " \n"[i == len - ]);
}
else
{
puts("CYCLES");
memset(vis, , sizeof vis);
memset(isleaf, , sizeof isleaf);
for (int i = ; i <= n; ++i) isleaf[fa[i]] = ;
work();
for (int i = ; i < k; ++i)
{
auto it = res[i];
int len = it.size();
printf("%d\n", len);
for (int j = ; j < len; ++j) printf("%d%c", it[j], " \n"[j == len - ]);
}
}
}
return ;
}
Codeforces Round #534 (Div. 2) Solution的更多相关文章
- Codeforces Round #466 (Div. 2) Solution
从这里开始 题目列表 小结 Problem A Points on the line Problem B Our Tanya is Crying Out Loud Problem C Phone Nu ...
- 老年OIer的Python实践记—— Codeforces Round #555 (Div. 3) solution
对没错下面的代码全部是python 3(除了E的那个multiset) 题目链接:https://codeforces.com/contest/1157 A. Reachable Numbers 按位 ...
- Codeforces Round #545 (Div. 1) Solution
人生第一场Div. 1 结果因为想D想太久不晓得Floyd判环法.C不会拆点.E想了个奇奇怪怪的set+堆+一堆乱七八糟的标记的贼难写的做法滚粗了qwq靠手速上分qwqqq A. Skyscraper ...
- 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 ...
- Codeforces Round 500 (Div 2) Solution
从这里开始 题目地址 瞎扯 Problem A Piles With Stones Problem B And Problem C Photo of The Sky Problem D Chemica ...
- [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 ...
- 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 ...
- Codeforces Round #534 (Div. 2) D. Game with modulo(取余性质+二分)
D. Game with modulo 题目链接:https://codeforces.com/contest/1104/problem/D 题意: 这题是一个交互题,首先一开始会有一个数a,你最终的 ...
- Codeforces Round #607 (Div. 1) Solution
从这里开始 比赛目录 我又不太会 div 1 A? 我菜爆了... Problem A Cut and Paste 暴力模拟一下. Code #include <bits/stdc++.h> ...
随机推荐
- C#中的方法,方法的重载,以及几个关键字
嘿嘿,今天来的早点啦,主要有问题解决不了,希望看到的亲们知道怎么整的给我说下,先谢谢哦:-D <一>首先复习了三元表达式:即 表达式1,表达式2,表达式3: 举例: bool resul ...
- 一加氢OS发布会 观看小结
观看地址:http://v.youku.com/v_show/id_XMTI0ODkzNTg5Mg==.html?from=s1.8-1-1.2八种基本色调.33%自由:top33%位置放壁纸,底部桌 ...
- C、C++编程入口,常见的编程题
1.设计一个从5个数中取最小数和最大数的程序. 2.#include<stdio.h> 3.int min(int a[],int i); 4.int max(int a[],int i) ...
- HTTP/2笔记之消息交换
前言 无论是HTTP/1.*还是HTTP/2,HTTP的基本语义是不变的,比如方法语义(GET/PUST/PUT/DELETE),状态码(200/404/500等),Range Request,Cac ...
- 【CSS系列】对表单和数据表格应用样式
表格特有的元素: 1.summary和caption caption用作与表格的标题.summary应用于表格标签,用来描述表格的内容,于image标签的alt文本相似. 2.thead tbody ...
- change事件的兼容性问题
当input的value被修改时,在没有失去焦点的情况下,无法触发change事件,但是可以触发propertychange事件. 但是propertychange事件存在兼容性问题: IE9以下支持 ...
- ubuntu 信使(iptux) 创建桌面快捷方式
$ sudo ln -s /usr/bin/iptux ~/桌面/iptux.ln
- 【BZOJ4424】Cf19E Fairy DFS树
[BZOJ4424]Cf19E Fairy Description 给定 n 个点,m 条边的无向图,可以从图中删除一条边,问删除哪些边可以使图变成一个二分图. Input 第 1 行包含两个整数 n ...
- 【BZOJ4554】[Tjoi2016&Heoi2016]游戏 二分图最大匹配
[BZOJ4554][Tjoi2016&Heoi2016]游戏 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个炸弹,看 ...
- Mac - 关闭隐藏文件显示(Terminal)
打开终端Terminal,输入:defaults write com.apple.finder AppleShowAllFiles -bool true 此命令显示隐藏文件defaults write ...