Mail.Ru Cup 2018 Round 1
A. Elevator or Stairs?
签.
#include <bits/stdc++.h>
using namespace std; int x, y, z, t[]; int main()
{
while (scanf("%d%d%d", &x, &y, &z) != EOF)
{
for (int i = ; i < ; ++i) scanf("%d", t + i);
int a = (abs(z - x) + abs(x - y)) * t[] + * t[];
int b = abs(x - y) * t[];
puts(a <= b ? "YES" : "NO");
}
return ;
}
B. Appending Mex
签.
#include <bits/stdc++.h>
using namespace std; #define N 100010
int n, a[N], vis[N], last; void solve()
{
for (int i = ; i <= n; ++i)
{
while (vis[last + ]) ++last;
if (a[i] > last + )
{
printf("%d\n", i);
return;
}
vis[a[i]] = ;
}
puts("-1");
} int main()
{
while (scanf("%d", &n) != EOF)
{
memset(vis, , sizeof vis); last = -;
for (int i = ; i <= n; ++i) scanf("%d", a + i);
solve();
}
return ;
}
C. Candies Distribution
Upsolved.
题意:
一个序列,$a_i取值为[1, n]$
告诉你$每个数左边有多少数大于你,记为l_i$
$右边有多少数大于你,记为r_i$
让你还原出这个序列,如果没有合法的输出$NO$
思路:
$我们知道一个数的l_i + r_i 越大,那么这个数越小$
$那我们不妨令 a_i = n - l_i - r_i$
$再检查一遍即可$
#include <bits/stdc++.h>
using namespace std; #define N 1010
int n, l[N], r[N], v[N]; int main()
{
while (scanf("%d", &n) != EOF)
{
for (int i = ; i <= n; ++i) scanf("%d", l + i);
for (int i = ; i <= n; ++i) scanf("%d", r + i);
for (int i = ; i <= n; ++i) v[i] = n - l[i] - r[i];
bool flag = true;
for (int i = ; i <= n; ++i)
{
for (int j = ; j < i; ++j)
if (v[j] > v[i])
--l[i];
for (int j = i + ; j <= n; ++j)
if (v[j] > v[i])
--r[i];
if (l[i] != || r[i] != )
{
flag = false;
break;
}
}
if (!flag) puts("NO");
else
{
puts("YES");
for (int i = ; i <= n; ++i)
printf("%d%c", v[i], " \n"[i == n]);
}
}
return ;
}
D. Changing Array
Upsolved.
题意:
给一个序列,$可以将每个位置上的数取反$
$求最多有多少子区间的异或和不为0$
思路:
求最多有多少子区间$异或和不为0,比较困难$
$正难则反,我们考虑反面,我们求最少有多少个子区间异或和为0$
$我们知道一段区间l, r的异或和是S_r \oplus S_[l - 1]$
$S表示前缀异或$
$那么一个序列的前缀异或里面如果有x个a, 那么子区间异或为0的个数为\frac{a \cdot (a - 1)}{2}$
$我们考虑 b = ~a, 而且a, b之间可以互相转化,并且只能互相转化,而不能转化为其他的数字$
$令x = a的个数, y = b的个数$
$我们令n = x + y $
$那么a, b构成的子区间个数就是 \frac{x \cdot (x - 1)}{2} + \frac{y \cdot (y - 1)}{2}$
$将n = x + y 代入$
$就得到一个一元二次方程,取对称轴即可$
$我们考虑转化都是\oplus (1 << k) - 1$
转化两次即相当于没有转化
$所以每个前缀异或都能转化为自己想要的那个数$
$为什么不考虑前面的数转化了会影响到后面的前缀异或?$
$那后面那个如果受影响了,再转化回来不就好了?$
#include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 200010
int n, k;
int a[N];
map <int, int> mp; int main()
{
while (scanf("%d%d", &n, &k) != EOF)
{
mp.clear(); mp[] = ;
int d = ( << k) - ;
for (int i = ; i <= n; ++i) scanf("%d", a + i);
for (int i = ; i <= n; ++i)
{
a[i] ^= a[i - ];
++mp[a[i]];
if (mp.find(a[i] ^ d) == mp.end()) mp[a[i] ^ d] = ;
}
ll res = ;
for (auto it : mp) if (it.first > (it.first ^ d))
{
int a = it.second, n = a + mp[it.first ^ d];
int b = n / ;
res += (1ll * n * n + 2ll * b * b - 2ll * b * n - n) / ;
}
printf("%lld\n", 1ll * n * (n + ) / - res);
}
return ;
}
Mail.Ru Cup 2018 Round 1的更多相关文章
- 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 2 Solution
A. Metro Solved. 题意: 有两条铁轨,都是单向的,一条是从左往右,一条是从右往左,Bob要从第一条轨道的第一个位置出发,Alice的位置处于第s个位置,有火车会行驶在铁轨上,一共有n个 ...
- Mail.Ru Cup 2018 Round 3 Solution
A. Determine Line Water. #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 ...
随机推荐
- Swift - UITableView的用法
因为倾向于纯代码编码,所以不太喜欢可视化编程,不过也略有研究,所以项目里面的所有界面效果,全部都是纯代码编写! 终于到了重中之重的tableview的学习了,自我学习ios编程以来,工作中用得最多的就 ...
- pow()
pow() 如果接收两个参数,如 pow(x, y),则结果相当于 x**y,也就是 x 的 y 次方pow() 如果接收三个参数,如 pow(x, y, z),则结果相当于 (x**y) % z,也 ...
- 关于.NET玩爬虫这些事
这几天在微信群里又聊到.NET可以救中国但是案例太少不深的问题,我说.NET玩爬虫简直就是宇宙第一,于是大神朱永光说,你为何不来写一篇总结一下? 那么今天就全面的来总结一下,在.NET生态下,如何玩爬 ...
- css选择器的性能
性能排序: 1.id选择器(#myid) 2.类选择器(.myclassname) 3.标签选择器(div,h1,p) 4.相邻选择器(h1+p) 5.子选择器(ul < li) 6.后代选择器 ...
- Microsoft Web Application Stress Tool 使用
为了测试数据的准备性,首先需要删除缓存和Cookies等临时文件.启动IE后打开“工具”菜单下的“Internet”选项命令,在打开的“Internet选项”窗口的“常规”选项卡中,单击“Intern ...
- 关于Properties的用法的详细解释
如果不熟悉 java.util.Properties类,那么现在告诉您它是用来在一个文件中存储键-值对的,其中键和值是用等号分隔的.(如清单 1 所示).最近更新的java.util.Properti ...
- mysql 远程连接超时解决办法
设置mysql远程连接root权限 在远程连接mysql的时候应该都碰到过,root用户无法远程连接mysql,只可以本地连,对外拒绝连接. 需要建立一个允许远程登录的数据库帐户,这样才可以进行在远程 ...
- 170630、springboot编程之普通类中调用spring管理的bean对象
我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ...
- Tunnelblick 覆盖安装失败
公司搬家, jira, sourceTree都链接不上了,发现是VPN断了的原因,需要重新链接VPN Tunnelblick坏掉了,覆盖安装总是提示安装失败,安装超时 nil,搜索一大堆文章, 看了这 ...
- curl 模拟GET\POST请求,以及curl post上传文件
https://blog.csdn.net/fungleo/article/details/80703365