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> ...
随机推荐
- Cesium - 离线使用方法
使用Cesium可以直观的看基于DEM切片产生的Terrain地形数据,有种身临其境的感觉,但缺点是Cesium默认缺省加载了微软Bing提供的地形以及遥感影像数据,可以跟踪日志,总提示让你申请微软的 ...
- 浅谈ITIL
本节内容 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infra ...
- 全面解析Linux 内核 3.10.x - 如何开始
万事开头难 - 如何开始? 人总是对未知的事物充满恐惧!就像航海一样,在面对危难的时候,船员和船长是一样心中充满恐惧的!只是船员始终充满恐惧,而船长却能压抑恐惧并从当前找出突破口! 我没有船长之能,但 ...
- PyQt4 Box布局
使用布局类别方式的布局管理器比绝对方式的布局管理器更加灵活实用.它是窗口部件的首选布局管理方式.最基本的布局类别是QHBoxLayout和QVBoxLayout布局管理方式,分别将窗口部件水平和垂直排 ...
- echarts实现柱状图分页展示
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- XML 和 JSON 的使用场景
我们都知道 JSON 和 XML 设计的初衷里都包含一点是对人类友好, 所以两者在这方面属于竞争关系. 而在 UI 描述上, 我觉得 XML 是比 JSON 要优异很多. 我们先来看一组简单的数据排版 ...
- php第二例
参考: http://www.php.cn/code/3645.html 前言 由于navicat在linux平台不能很好的支持, PHP的学习转到windows平台. php IDE: PhpSto ...
- java基础---->多线程之interrupt(九)
这里我们通过实例来学习一下java多线程中关于interrupt方法的一些知识.执者失之.我想当一个诗人的时候,我就失去了诗,我想当一个人的时候,我就失去了我自己.在你什么也不想要的时候,一切如期而来 ...
- MQTT的学习研究(十一) IBM MQTT 简单发布订阅实例
package com.etrip.push; import com.ibm.mqtt.MqttAdvancedCallback; import com.ibm.mqtt.MqttClient; im ...
- Linux下TCP延迟确认(Delayed Ack)机制导致的时延问题分析
版权声明:本文由潘安群原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/105 来源:腾云阁 https://www.qclo ...