Mail.Ru Cup 2018 Round 3 Solution
A. Determine Line
Water.
#include <bits/stdc++.h>
using namespace std; int n, vis[]; int main()
{
while (scanf("%d", &n) != EOF)
{
memset(vis, , sizeof vis);
for (int i = , tot, x; i <= n; ++i)
{
scanf("%d", &tot);
while (tot--)
{
scanf("%d", &x);
++vis[x];
}
}
for (int i = ; i <= ; ++i) if (vis[i] == n) printf("%d ", i);
puts("");
}
return ;
}
B. Divide Candies
Solved.
题意:
有$n \cdot n 的网格,每个网格放的糖数是(i^2 + j^2), i, j 表示行列$
求有多少个格子上的糖数是$m的倍数$
思路:
因为$m很小,处理出m的每个余数所对应的数字个数,再加加乘乘就好了$
#include <bits/stdc++.h>
using namespace std; #define ll long long
int n, m;
ll cnt[]; ll calc(ll x, ll y)
{
if (x % m >= y) return x / m + ;
return x / m;
} int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
memset(cnt, , sizeof cnt);
for (int i = ; i < m; ++i)
cnt[i * i % m] += calc(n, i);
--cnt[]; cnt[m] = cnt[];
ll res = ;
for (int i = ; i < m; ++i) res += cnt[i] * cnt[m - i];
printf("%lld\n", res);
}
return ;
}
C. Pick Heroes
Solved.
题意:
有两支队伍,每支队伍$n个人,每个人要选一个英雄,一共有2 \cdot n 个英雄$
$两支队伍的人轮流选,但是有些英雄有对应关系,也就是说如果某一轮一个人选了其中一个$
$那么在下一轮他的对手将被强制选择另一个,每个英雄最多存在于一个对应关系中$
这里是交互题。
思路:
贪心选即可,注意自己先手的时候,尽量先贪心选有对应关系的大的那只,再从大往小取
后手的时候注意特判,自己可不可以选有对应关系的英雄,如果可以,那么就回到先手状态
#include <bits/stdc++.h>
using namespace std; #define N 2010
#define pii pair <int, int>
int n, m, t;
vector <pii> v, p;
map <int, int> mp;
int vis[N]; int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
v.clear(); mp.clear(); p.clear();
memset(vis, , sizeof vis);
for (int i = , x; i <= * n; ++i)
{
scanf("%d", &x);
p.emplace_back(x, i);
}
for (int i = , x, y; i <= m; ++i)
{
scanf("%d%d", &x, &y);
mp[x] = y;
mp[y] = x;
v.emplace_back(x, y);
}
scanf("%d", &t);
for (auto &it : v) if (p[it.first - ].first < p[it.second - ].first) swap(it.first, it.second);
sort(p.begin(), p.end(), [](pii a, pii b) { return a.first > b.first; });
if (t == )
{
int x;
for (auto &it : v)
{
printf("%d\n", it.first);
fflush(stdout);
scanf("%d", &x);
vis[it.first] = ;
vis[x] = ;
}
for (int i = v.size() + , r = ; i <= n; ++i)
{
while (vis[p[r].second]) ++r;
printf("%d\n", p[r].second);
fflush(stdout);
scanf("%d", &x);
vis[p[r].second] = ;
vis[x] = ;
}
}
else
{
int x;
for (int i = , r1 = , r2 = ; i <= n; ++i)
{
scanf("%d", &x);
vis[x] = ;
if (mp.find(x) != mp.end() && vis[mp[x]] == )
{
printf("%d\n", mp[x]);
vis[mp[x]] = ;
}
else
{
while (r1 < v.size() && vis[v[r1].first]) ++r1;
if (r1 < v.size())
{
printf("%d\n", v[r1].first);
vis[v[r1].first] = ;
}
else
{
while (vis[p[r2].second]) ++r2;
printf("%d\n", p[r2].second);
vis[p[r2].second] = ;
}
}
fflush(stdout);
}
} }
return ;
}
D. Decorate Apple Tree
Solved.
题意:
有一棵树,每个叶子要有一个颜色。
一个点被定义为好点,是在它的子树中每个叶子的颜色都不同。
求好点个数为$k的时候 k \in [1, n] 所需要的最小的颜色个数$
思路:
先处理出每个点的子树中有多少个叶子,再按从小到大排序,依次输出即可。
#include <bits/stdc++.h>
using namespace std; #define N 100010
int n;
vector <int> G[N]; int sze[N];
void DFS(int u)
{
sze[u] = ;
for (auto v : G[u])
{
DFS(v);
sze[u] += sze[v];
}
if (!sze[u]) sze[u] = ;
} int main()
{
while (scanf("%d", &n) != EOF)
{
for (int i = ; i <= n; ++i) G[i].clear();
for (int u = , v; u <= n; ++u)
{
scanf("%d", &v);
G[v].push_back(u);
} DFS();
sort(sze + , sze + + n);
for (int i = ; i <= n; ++i) printf("%d%c", sze[i], " \n"[i == n]);
}
return ;
}
E. Check Transcription
Unsolved.
题意:
给出一个01串,以及一个字符串,求找出两个小串$A, B$
$使得01串为0的位置填A, 为1的位置填B,最后组成的串为给出的字符串$
求存在多少个$pairs(A, B)$
F. Write The Contest
Unsolved.
G. Take Metro
Unsolved.
H. Detect Robots
Unsolved.
Mail.Ru Cup 2018 Round 3 Solution的更多相关文章
- Mail.Ru Cup 2018 Round 2 Solution
A. Metro Solved. 题意: 有两条铁轨,都是单向的,一条是从左往右,一条是从右往左,Bob要从第一条轨道的第一个位置出发,Alice的位置处于第s个位置,有火车会行驶在铁轨上,一共有n个 ...
- Mail.Ru Cup 2018 Round 3 B. Divide Candies
题目链接 分析一下题意可以得到题目要求的是满足下面这个 公式的不同的i,ji,ji,j的方案数; 即(i2+j2)mod   m=0 (n ≤ ...
- Mail.Ru Cup 2018 Round 3
A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...
- Mail.Ru Cup 2018 Round 2
A:阅读理解. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...
- [codeforces Mail.Ru Cup 2018 Round 3][B Divide Candies ][思维+数学]
https://codeforces.com/contest/1056/problem/B 题意:输入n,m 求((a*a)+(b*b))%m==0的(a,b)种数(1<=a,b<= ...
- [codeforces Mail.Ru Cup 2018 Round 1 D][ xor 操作]
http://codeforces.com/contest/1054/problem/D 题目大意:一个序列a1 a2...an,可以对若干个元素进行取反,使所得的新序列异或和为0的区间个数最多. 题 ...
- Mail.Ru Cup 2018 Round 1
A. Elevator or Stairs? 签. #include <bits/stdc++.h> using namespace std; ]; int main() { while ...
- Mail.Ru Cup 2018 Round 1 virtual participate记
因为睡过了只好vp. A:阅读理解. #include<iostream> #include<cstdio> #include<cmath> #include< ...
- Mail.Ru Cup 2018 Round 2C(__gcd)
#include<bits/stdc++.h>using namespace std;long long mx(long long l1,long long r1,long long l2 ...
随机推荐
- NPOI抓取WPS表格保存的EXCEL文件
其实是可以抓取的,唯一不同就是Sheet的位置前进了一位. var sheet1 = (HSSFSheet)hssfworkbook.GetSheetAt(1); 来自为知笔记(Wiz ...
- docker pull 详解
docker pull 用于从镜像仓库中拉取或更新指定镜像,用法如:docker pull centos ,默认是从 Docker Hub 中拉取镜像 在拉取镜像前,我们可以先配置 docker 加速 ...
- linux系统socket通信编程实践
简单介绍并实现了基于UDP(TCP)的windows(UNIX下流程基本一致)下的服务端和客户端的程序,本文继续探讨关于UDP编程的一些细节. 下图是一个简单的UDP客户/服务器模型: 我在这里也实现 ...
- Swift 高级运算符
本文转载至 http://my.oschina.net/sunqichao/blog?disp=2&catalog=0&sort=time&p=2 除了基本操作符中所讲的运算符 ...
- iOS - UIImageView - how to handle UIImage image orientation
本文转载至 http://stackoverflow.com/questions/8915630/ios-uiimageview-how-to-handle-uiimage-image-orienta ...
- pycharm激活地址
http://elporfirio.com:1017 http://idea.iteblog.com/key.php
- JavaScript的记忆函数真的可以提升性能吗?
1 记忆函数是什么呢? 让函数记住曾经计算过的参数对应的结果 2 那我们为什么使用记忆函数呢? 答案是 避免重复计算 3 在工作中如何使用和实现函数记忆 ? 形成闭包,在闭包中维护一个哈希数组(其 ...
- 设计模式之抽象工厂模式(Java实现)
“上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说完,摸了摸跪的发疼的膝盖,咳咳,我发四我没笑!真 ...
- 开源的PaaS方案:在OpenStack上部署CloudFoundry (一)简介
目录(?)[-] OpenStack简介 OpenStack是一个美国国家航空航天局和Rackspace合作研发的以Apache许可证授权并且是一个自由软件和开放源代码项目 OpenStack是一个云 ...
- JS-JavaScript类库整理 [更新中...]
老大.jQuery插件库 ——收集最全最新最好的jQuery插件 http://www.jq22.com/ 一.Moment.js ——JavaScript 日期处理类库 http://momentj ...