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的更多相关文章

  1. Mail.Ru Cup 2018 Round 2 Solution

    A. Metro Solved. 题意: 有两条铁轨,都是单向的,一条是从左往右,一条是从右往左,Bob要从第一条轨道的第一个位置出发,Alice的位置处于第s个位置,有火车会行驶在铁轨上,一共有n个 ...

  2. Mail.Ru Cup 2018 Round 3 B. Divide Candies

    题目链接 分析一下题意可以得到题目要求的是满足下面这个 公式的不同的i,ji,ji,j的方案数; 即(i2+j2)mod&ThinSpace;&ThinSpace; m=0 (n ≤  ...

  3. Mail.Ru Cup 2018 Round 3

    A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  4. Mail.Ru Cup 2018 Round 2

    A:阅读理解. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  5. [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<= ...

  6. [codeforces Mail.Ru Cup 2018 Round 1 D][ xor 操作]

    http://codeforces.com/contest/1054/problem/D 题目大意:一个序列a1 a2...an,可以对若干个元素进行取反,使所得的新序列异或和为0的区间个数最多. 题 ...

  7. Mail.Ru Cup 2018 Round 1

    A. Elevator or Stairs? 签. #include <bits/stdc++.h> using namespace std; ]; int main() { while ...

  8. Mail.Ru Cup 2018 Round 1 virtual participate记

    因为睡过了只好vp. A:阅读理解. #include<iostream> #include<cstdio> #include<cmath> #include< ...

  9. 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 ...

随机推荐

  1. Nginx(四)-- 配置文件之location

    1.location的作用 location主要做定位功能,根据uri来进行不同的定位. 2.location的语法 location [=|~|~*|^~] /uri/ { …} = 开头表示精确匹 ...

  2. /etc/hostname

    我们可以使用 hostname 命令来修改主机名,但只是临时生效,如果想永久生效可以编辑 /etc/hostname 文件,注意不是每个 Linux 发行版都有该文件 root@Ubuntu_Lee: ...

  3. Python cookielib 模块

    什么是 cookie : 指某些网站为了辨别用户身份,进行 session 跟踪而储存在用户本地终端上的数据,通常以 txt 文件形式存储.比如你登录了淘宝,浏览器就会保存 cookie 信息,这样我 ...

  4. N32903系列的基础知识(1)

    N32903U1DN使用ARM926EJ-S内核,其内部集成的JPEG编解码器.CMOS摄像头接口.32通道的声音处理单元(SPU).ADC.DAC等不仅可以满足各种的应用需求,还能减少生产方面的物料 ...

  5. Mybatis返回map集合

    <resultMap id="pieMap" type="HashMap"> <result property="value&quo ...

  6. 日记整理---->2016-11-23

    这里放一些jquery的学习知识.可能从一开始就是我一个人单枪匹马,来年不求并肩作战,只愿所向披靡. jquery的学习一 jquery关于ajax的一些学习博客 ajax方法的介绍:https:// ...

  7. MongoDB复制集原理

    版权声明:本文由孔德雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/136 来源:腾云阁 https://www.qclo ...

  8. 在android真机上使用sqlite3

    #zijun#2013.10.29#QQ:223663737 在android真机上使用sqlite3 前期准备: 1:保证手机已经ROOT 操作步骤: 1 : 打开CMD 2 : 进入android ...

  9. 12.文件系统fs

    文件系统fs ==> 提供文件的读取, 写入, 更名, 删除, 遍历目录, 链接等POSIX文件系统操作 1.fs.readFile(filename, [encoding], [callbac ...

  10. [USB] Windows USB/DVD Download Tool

    此工具为微软官方U盘启动盘制作工具 Windows USB/DVD Download Tool 说明:https://www.microsoft.com/en-us/download/windows- ...