Codeforces Round #400 (Div. 1 + Div. 2, combined)——ABCDE
题目戳这里
A.A Serial Killer
题目描述似乎很恶心,结合样例和样例解释猜测的题意
使用C++11的auto可以来一手骚操作
#include <bits/stdc++.h>
using namespace std;
int n;
string s[];
map <string, int> p;
int main() {
cin >> s[] >> s[];
p[s[]] = p[s[]] = ;
cin >> n;
cout << s[] << " " <<s[] << endl;
while(n --) {
cin >> s[] >> s[];
p[s[]] ++, p[s[]] ++;
for(auto iter : p)
if(iter.second == ) cout << iter.first << " ";
puts("");
}
return ;
}
其实等价于这样写
#include <bits/stdc++.h>
using namespace std;
int n;
string s[];
map <string, int> p;
int main() {
cin >> s[] >> s[];
p[s[]] = p[s[]] = ;
cin >> n;
cout << s[] << " " <<s[] << endl;
while(n --) {
cin >> s[] >> s[];
p[s[]] ++, p[s[]] ++;
for(map <string, int>::iterator iter = p.begin();iter != p.end();iter ++)
if(iter -> second == ) cout << iter -> first << " ";
puts("");
}
return ;
}
B.Sherlock and his girlfriend
很蠢的一题,质数标1,合数标2就好了
#include <bits/stdc++.h>
#define rep(i, j, k) for(int i = j;i <= k;i ++)
#define rev(i, j, k) for(int i = j;i >= k;i --)
using namespace std;
typedef long long ll;
const int maxn = ;
int n, a[maxn];
int main() {
ios::sync_with_stdio(false);
cin >> n;
if(n < ) puts("");
else puts("");
for(int i = ;i <= n + ;i ++)
if(a[i] != ) {
a[i] = ;
for(int j = i << ;j <= n + ;j += i)
a[j] = ;
}
for(int i = ;i <= n + ;i ++)
printf("%d ", a[i]);
return ;
}
C.Molly's Chemicals
有那么一点意思的题目
求有多少段连续子段和为k的非负power
显然k为2的话,大概能2^0 - 2^50左右吧
所以直接枚举 k^p 即可
偷懒套个map,复杂度O(n(logn)^2)
注意:
1.非负power,包括1
2. |k| = 1 特判,否则死循环
#include <bits/stdc++.h>
#define rep(i, j, k) for(int i = j;i <= k;i ++)
#define rev(i, j, k) for(int i = j;i >= k;i --)
using namespace std;
typedef long long ll;
int n, t;
ll k, s[];
map <ll, int> p;
int main() {
ios::sync_with_stdio(false);
int x;
cin >> n >> t;
rep(i, , n) cin >> x, s[i] = s[i - ] + x;
for(ll j = ;abs(j) <= 100000000000000ll;j *= t) {
p.clear(), p[] = ;
rep(i, , n) {
k += p[s[i] - j];
p[s[i]] ++;
}
if(t == || (t == - && j == -)) break;
}
cout << k;
return ;
}
D.The Door Problem
应该注意到each door is controlled by exactly two switches
所以显然对于一开始锁上的门,只能选择一个开关
一开始打开的门,可以选择都不选或者都选
于是我们可以想到2-sat来解决
实际上2-sat也的确可以解决
但是我们注意到这个2-sat的特殊性
每组中的两个选择在某种程度上是等价的
而我们平时做的 Ai 与 Ai’ 是不等价的
两个选择等价意味着连的边已经是无向边
即若有Ai -> Aj,则必有Aj -> Ai
这样就不需要再tarjan
直接并查集就可以解决了
#include <cstdio>
const int maxn = ;
int n, m, f[maxn << ], a[][maxn];
bool op[maxn];
int find_(int x) {
if(f[x] != x) return f[x] = find_(f[x]);
return x;
}
void union_(int x, int y) {
x = find_(x), y = find_(y);
if(x != y) f[x] = y;
}
int main() {
scanf("%d %d", &n, &m);
for(int i = ;i <= n;i ++) scanf("%d", &op[i]);
for(int k, j, i = ;i <= m;i ++) {
scanf("%d", &j);
while(j --) {
scanf("%d", &k);
if(a[][k]) a[][k] = i;
else a[][k] = i;
}
}
for(int i = m << ;i;i --) f[i] = i;
for(int i = ;i <= n;i ++)
if(op[i]) union_(a[][i], a[][i]), union_(a[][i] + m, a[][i] + m);
else union_(a[][i], a[][i] + m), union_(a[][i] + m, a[][i]);
for(int i = ;i <= m;i ++)
if(find_(i) == find_(i + m)) {
puts("NO");
return ;
}
puts("YES");
return ;
}
E.The Holmes Children
手动计算发现 f 函数为欧拉函数
gcd(x, y) = 1
x + y = n
=> gcd(x, x + y) = 1 即 gcd(x, n) = 1
g(n) = n ,剩下部分很好解决
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod_ = 1e9 + ;
ll f(ll x) {
ll ret = x;
for(ll i = ;i * i <= x;i ++)
if(x % i == ) {
ret /= i, ret *= (i - );
while(x % i == ) x /= i;
}
if(x != ) ret /= x, ret *= (x - );
return ret;
}
int main(){
ll n, k;
cin >> n >> k;
k = (k + ) >> ;
for(int i = ;i <= k;i ++) {
n = f(n);
if(n == ) break;
}
cout << n % mod_;
return ;
}
Codeforces Round #400 (Div. 1 + Div. 2, combined)——ABCDE的更多相关文章
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- Educational Codeforces Round 43 (Rated for Div. 2)
Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...
- Educational Codeforces Round 35 (Rated for Div. 2)
Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...
- Educational Codeforces Round 63 (Rated for Div. 2) 题解
Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...
- Educational Codeforces Round 39 (Rated for Div. 2) G
Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...
- Educational Codeforces Round 48 (Rated for Div. 2) CD题解
Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...
- Educational Codeforces Round 60 (Rated for Div. 2) 题解
Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...
随机推荐
- bzoj 2465 小球
题目大意: 给定n个不同颜色的球,每个球都有一个分数,同时有m个瓶子,每个瓶子都有固定的容量 必须把球放到瓶子里面 计算最多能放多少个球到这些瓶子里 思路: 开始想的是费用流 超级源向每个球连一条 容 ...
- 为何Google这类巨头会认为敏捷开发原则是废话?
[编者按]这是一个来自Quora的问题.Rocket程序员Jasmine Adamson在文中表达了敏捷开发原则是废话的观点,他觉得现实生活中没有什么人会推崇这些原则来工作,不过他们仍然在说其所做的是 ...
- 洛谷 P4178 Tree —— 点分治
题目:https://www.luogu.org/problemnew/show/P4178 这道题要把 dep( dis? ) 加入一个 tmp 数组里,排序,计算点对,复杂度很美: 没有写 sor ...
- Mariadb-lib
mariadb-libs-5.5.44-2.el7.centos.x86_64
- E20170804-mk
epic n. 史诗; 叙事诗; 史诗般的作品; estimate vt. 估计,估算; 评价,评论; 估量,估价; Sprint vi. 冲刺,全速短跑; n. 全速短跑; 速度或活动的突然爆发; ...
- P4166 [SCOI2007]最大土地面积
传送门 首先,四边形的四个点肯定都在凸包上(别问我为什么我也不知道,感性理解一下好了) 那么我们可以求出凸包之后\(O(n^4)\)暴力枚举,据说在随机数据下凸包上的点只有\(O(logn)\)个可过 ...
- RHEL6.5安装成功ORACLE11GR2之后,编写PROC程序出错解决方法
1. proc: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: N ...
- Centos 7 安装google 浏览器(yum 方式)
过程: 1 vim /etc/yum/repo.s/google_chrome.repo 2 添加如下内容: [google-chrome] name=google-chrome ...
- ACM_小G的循环
小G的循环 Time Limit: 2000/1000ms (Java/Others) Problem Description: 一回生,二回熟,三回就腻,小G用for,while循环用得太多了,累觉 ...
- linux命令(006) -- w
w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令.执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序.单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户 ...