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

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

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

  2. Mail.Ru Cup 2018 Round 3

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

  3. Mail.Ru Cup 2018 Round 2

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

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

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

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

  6. Mail.Ru Cup 2018 Round 2 Solution

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

  7. Mail.Ru Cup 2018 Round 3 Solution

    A. Determine Line Water. #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. SYN攻击处理

    针对SYN攻击的几个环节,提出相应的处理方法: 方式1:减少SYN-ACK数据包的重发次数(默认是5次): sysctl -w net.ipv4.tcp_synack_retries=3 sysctl ...

  2. 首个vue.js项目收尾中……

    前言: 4.26号入手vue.js+elementUI,迄今为止我们的工作应该可以暂时告一段落了:下周开始,又是新的“征程”. 过程:站在接近完成的角度来看这个项目,似乎的确有许多事情需要自己阐述. ...

  3. PHP防止跨站表单提交与同站跨页伪造表单的攻击

    在以前的防止跨站攻击的时候,使用了验证提交的页面是否是同一个站点,这样可以防止普通的攻击,ereg("blog.qita.in",$_SERVER['HTTP_REFERER']) ...

  4. 新版本读取老版本文件崩溃BUG

    读取文件匹配代码 BOOL CWBPage::LoadFromFile(CFile *pFile, LONGLONG& lOff, ULONGLONG lFileLength) { if (p ...

  5. 好用的在线Markdown编辑器

    dillinger.io 支持在线编辑,导出为html格式等.

  6. 使用jQuery操作元素属性

    在jQuery中,提供了attr函数来操作元素属性,具体如下: 函数名 说明 例子 attr(name) 取得第一个匹配元素的属性值. $("input").attr(" ...

  7. [020]Sencha Ext JS 6.0使用教程2

    本节主要以典型例子介绍如何用Sencha Ext JS6.0进行项目开发 入门阶段总是比较难的,掌握了基本操作步骤,使用方法,架构思维,开发起来还是满顺利,开心的,自己又能掌握一门新技术,又能进步,主 ...

  8. Docker源码分析(二):Docker Client创建与命令执行

    1. 前言 如今,Docker作为业界领先的轻量级虚拟化容器管理引擎,给全球开发者提供了一种新颖.便捷的软件集成测试与部署之道.在团队开发软件时,Docker可以提供可复用的运行环境.灵活的资源配置. ...

  9. hdu1024 Max Sum Plus Plus[降维优化好题(貌似以后可以不用单调队列了)]

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  10. js 生成二维码图片

    1.用纯JavaScript实现的微信二维码图片生成器 QRCode.js是javascript实现二维码(QRCode)制作生成库. QRCode.js有着良好的跨浏览器兼容性(高版本使用HTML5 ...