A. Elections

题意概述

给出 \(a_1, \ldots, a_n\),求最小的 \(k (k \ge \max a_i)\), 使得 \(\sum_{i=1}^n a_i < \sum_{i=1}^n (k-a_i)\) 原题链接

解题思路

数据范围小,直接枚举就好了

代码

#include <bits/stdc++.h>

using namespace std;

int main() {
ios::sync_with_stdio(false);
int n;
cin >> n;
long long sum = 0;
int mx = 0;
for(int i=0; i<n; i++) {
int x;
cin >> x;
sum+=x;
if(x>mx) mx = x;
}
int start = sum*2/n;
if(start < mx) start = mx; for(int i=start; ;i++) {
if(i*n > sum*2) {cout << i << endl;break;}
}
return 0;
}

B. Lost Array

题意概述

有一个数组 \(x_0, x_1, \ldots, x_{k-1}\) . 由它可以得到另一个数组 $$

a_i=\left{\begin{array}{ll}

0& i=0,\

x_{(i-1)\bmod k} + a_{i-1}& 1 \le i \le n

\end{array}\right.

\[ 现给出数组 $a$,求数组 $x$ 的所有可能长度 <a href=" http://codeforces.com/contest/1043/problem/B">原题链接</a>

### 解题思路
根据公式可发现,$a_i - a_{i-1} = x_{(i-1)\bmod k}$ , 若 $k = n$ 则得到一个可行的 $ a $ , 再枚举 $k$,判断在 $a$ 中是否 $k$个一组循环即可

### 代码
```c++
#include <bits/stdc++.h>

using namespace std;

int a[2000],b[2000];
int main() {
ios::sync_with_stdio(false);
int n;
cin >> n;
for(int i=1; i<=n; i++) {
cin >> a[i];
b[i] = a[i]-a[i-1];
}

vector<int > ans;

for(int i=1; i<=n; i++){
bool flag = true;
for(int j=1; j<=i; j++) {
int ti = n/i; if(n%i) ti++;
for(int k=0; k<ti; k++) {
if((k+1)*i+j<=n){
if(b[k*i+j]==b[(k+1)*i+j]) {

}else {
flag = false;
break;
}
}
}
if(flag==false) break;
}
if(flag) ans.push_back(i);
}
cout << ans.size() << endl;
for(auto i : ans) cout << i << " ";
return 0;
}
```

## C. Smallest Word

### 题意概述
给出一个只包含字符 a 和 b 的串 s,对于从左到右每一个前缀,都可以选择进行翻转或者不翻转,使得最后这个字符串的字典序最小<a href=" http://codeforces.com/contest/1043/problem/C">原题链接</a>

### 解题思路
通过翻转一定可以使得所有的a在前面,b在后面,从而使字典序最小。
粗略证明:

* 假设当前的前缀子串满足字符 'a' 和 'b' 分别在该子串的两端( 如[aabb], [baa]),那么下一个前缀子串也一定满足这个性质(如果不满足,可通过翻转当前的前缀子串来使下一个前缀子串满足, 如[aaabb]a 翻转 [bbaaa]a)
* 其中第一个前缀子串一定满足该性质,递推得证

所以只需要找到由右至左第一个 'a' 的位置,然后从它开始向左遍历,每当 $s_i \neq s_{i+1}$ 那么需要翻转,否则不翻转

### 代码
```c++
#include <bits/stdc++.h>

using namespace std;

char s[2000];
int ans[2000];
int main() {
ios::sync_with_stdio(false);
cin >> s;
int pos = -1;
for(int i=strlen(s)-1; i>=0; i--) {
if(s[i] == 'a') {
pos = i;
break;
}
}
if(pos==-1) {

}
ans[pos] = 1;
for(int i=pos-1; i>=0; i--) {
if(s[i] != s[i+1]) ans[i] = 1;
else ans[i] = 0;
}
for(int i=0; i<strlen(s); i++) {
cout << ans[i] << " ";
}
return 0;
}
```

## D. Mysterious Crime

### 题意概述

给出 m 组 1~n 的排列,每一组选择删除一些前缀和后缀,使得所有组剩下的部分的数字以及剩下的数字的顺序都相同,求有多少种删除方法。

### 解题思路

首先至少有 n 种方法,即每组都删到只剩一个相同的数字为止
当某一个连续区间在 m 组中都出现时,答案+1
所以可以在每一组中,记录某个数的下一个数。当这个关系在其他组不成立时,则这一组数字对答案没有贡献
当连续区间较大时,区间长度每+1,答案 += 当前区间长度
<a href=" http://codeforces.com/contest/1043/problem/D">原题链接</a>
(表述不清晰。留坑)

### 代码
```c++
#include<bits/stdc++.h>

using namespace std;

const int maxn = 1e5+7;

int a[maxn],f[maxn];

int main() {
ios::sync_with_stdio(false);
int n, m;
cin >> n >> m;
for(int i=1; i<=n; i++) {
cin >> a[i];
f[a[i-1]] = a[i];
}f[a[n]] = n+1;
for(int i=1; i<m; i++) {
for(int i=1; i<=n; i++) {
cin >> a[i];
if((i-1) && f[a[i-1]]!=a[i]) f[a[i-1]]=-1;
} if(f[a[n]] != n+1) f[a[n]]=-1;
}
int len = 0;long long ans = 0;
for(int i=1; i<n; i++) {
if(f[a[i]] > 0)
if(f[a[i-1]] > 0) {
len ++;
ans += len;
} else {
len = 1;
ans += len;
}
}
cout << n+ans << endl;
return 0;
}
```

## E. Train Hard, Win Easy

### 题意概述
留坑<a href=" http://codeforces.com/contest/1043/problem/E">原题链接</a>
### 解题思路
留坑
### 代码
```c++
#include <bits/stdc++.h>

using namespace std;

const int maxn=3e5+7;

int f[maxn];

struct __ {
long long x, y, id;
bool operator<(const __ & b) const {
return (x-y) > (b.x-b.y);
}
}a[maxn];

long long sum[maxn];

int main() {
ios::sync_with_stdio(false);
int n, m;
cin >> n >> m;
for(int i=0; i<n; i++) {
cin >> a[i].x >> a[i].y;
a[i].id = i;
}
sort(a, a+n);
for(int i=0; i<n; i++) {
f[a[i].id] = i;
}
long long s=0;
for(int i=0; i<n; i++) {
sum[i] = a[i].x*i+(n-1-i)*a[i].y;
}
for(int i=1; i<n; i++) {
s+=a[i-1].y;
sum[i]+=s;
}
s = 0;
for(int i=n-2; i>=0; i--) {
s+=a[i+1].x;
sum[i]+=s;
}
for(int i=0; i<m; i++ ) {
int s, t;
cin >> s1 >> t1;
s1--;t1--;
s1 = f[s1];
t1 = f[t1];
long long sub = 0;
if(a[s1].x+a[t1].y<a[s1].y+a[t1].x){
sub = a[s1].x + a[t1].y;
}else {
sub = a[t1].x + a[s1].y;
}
sum[s1] -= sub;
sum[t1] -= sub;
}
for(int i=0; i<n; i++) {
cout << sum[f[i]] << " ";
}
return 0;
}
```
## F. Make It One

### 题意概述
留坑<a href="http://codeforces.com/contest/1043/problem/G">赶紧补了</a>

### 解题思路
留坑

### 代码
留坑

## G. Speckled Band

### 题意概述
深渊巨坑 <a href="http://codeforces.com/contest/1043/problem/G">有生之年</a>

### 解题思路
深渊巨坑

### 代码
深渊巨坑\]

Codeforces Round #519 题解的更多相关文章

  1. Codeforces Round #519 by Botan Investments(前五题题解)

    开个新号打打codeforces(以前那号玩废了),结果就遇到了这么难一套.touristD题用了map,被卡掉了(其实是对cf的评测机过分自信),G题没过, 700多行代码,码力惊人.关键是这次to ...

  2. Codeforces Round #519 by Botan Investments

    Codeforces Round #519 by Botan Investments #include<bits/stdc++.h> #include<iostream> #i ...

  3. Codeforces Round #556 题解

    Codeforces Round #556 题解 Div.2 A Stock Arbitraging 傻逼题 Div.2 B Tiling Challenge 傻逼题 Div.1 A Prefix S ...

  4. Codeforces Round #569 题解

    Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...

  5. Codeforces Round #557 题解【更完了】

    Codeforces Round #557 题解 掉分快乐 CF1161A Hide and Seek Alice和Bob在玩捉♂迷♂藏,有\(n\)个格子,Bob会检查\(k\)次,第\(i\)次检 ...

  6. CFEducational Codeforces Round 66题解报告

    CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...

  7. Codeforces Round #542 题解

    Codeforces Round #542 abstract I决策中的独立性, II联通块染色板子 IIIVoronoi diagram O(N^2 logN) VI环上距离分类讨论加取模,最值中的 ...

  8. [题解]Codeforces Round #519 - D. Mysterious Crime

    [题目] D. Mysterious Crime [描述] 有m个n排列,求一共有多少个公共子段. 数据范围:1<=n<=100000,1<=m<=10 [思路] 对于第一个排 ...

  9. [题解]Codeforces Round #519 - C. Smallest Word

    [题目] C. Smallest Word [描述] IA有一个由若干个'a'和'b'组成的字符串,IA可以翻转该字符串的任意长的前缀,IA想通过这样的操作得到一个字典序最小的字符串,求一种可能的翻转 ...

随机推荐

  1. flask_admin 笔记三 客户化视图

    客户化视图1, model数据模型参数配置1)配置全局参数内置的ModelView类很适合快速入门. 但是,您需要配置其功能以适合您的特定型号. 这是通过设置ModelView类中提供的配置属性的值来 ...

  2. setBit testBit权限管理

    1.jdk7文档解释 public boolean testBit(int n) Returns true if and only if the designated bit is set. (Com ...

  3. java批量爬取电影资源

    摘要 网上有很多个人站来分享电影资源,其实有时候我们自己也想做这个一个电影站来分享资源.但是这个时候就有一个问题,电影的资源应该从哪里来呢?难道要自己一条条手动去从网络上获取,这样无疑是缓慢而又效率低 ...

  4. 浅谈SVG(可缩放的矢量图形)

    前一段项目中用到了svg图片就和其他的元素一样 直接引用就可以展示在页面上,因为项目紧张没有仔细的研究,最近在扩展自己的基础知识,偶然看到了这个东西,于是总结了一些博客园中关于这个svg的基础知识,只 ...

  5. PAT甲题题解-1008. Elevator (20)-大么个大水题,这也太小瞧我们做题者的智商了

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <cstr ...

  6. 项目复审——Beta阶段

    排名原则还是基于这个组到底自己做了多少东西,又借鉴了多少东西,不过其他组的具体情况我也不一定说的清楚,所以只是通过大家的码云和一些了解来评判的.当然,是否发布也是一个重要指标.顺便感叹一句,现在的云平 ...

  7. (第二周)读《我是一只IT小小鸟》有感

    读了蒋宇东学长的这篇描述他成长经历和生活感悟的博文,我真的收获了很多,有一种“相见恨晚”的感觉.同为航院的学子,我们有太多太多相同的生活学习经历. 我已经是一名大三的学生了,不知不觉中我大学生活的大部 ...

  8. vs2013的安装与使用 测试

    vs2013软件我去年已经用过,可是当时只是鉴于对于c语言的编程,并没有觉得好用,况且好多的功能自并没有去深入研究,所以当时对于这个软件还是排斥的.安装的时候是别人帮我装的,所以并没有在安装的过程有问 ...

  9. [转帖]在VMware ESXi服务器上配置NAT上网 需要学习一下。

    http://blog.51cto.com/boytnt/1292487 在使用VMware workstation的时候,我们经常以NAT的方式配置虚拟机的网络,与桥接方式相比,这样配置可以让虚拟机 ...

  10. ethereum & ETC

    ethereum & ETC https://github.com/ethereum/go-ethereum https://discountry.github.io/tutorial/201 ...