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. 3dmax2020下载安装3dmax2020破解中文版下载安装

    3dmax在室内设计.建筑设计领域是最专业的效果图制作软件,也是在游戏动画等领域中在场景方面最专业的软件,目前最新3dmax2020版本已出,我分享亲测好用的软件包,拿走不谢! 3dmax2020安装 ...

  2. 浅谈我的UI设计之路

    时光匆匆,进入UI学习已经快两个月了,这段时间过得很充实,因为有压力才有收获. 还记的刚刚学习手绘的时候,对于这个行业只有一个初步的认识,知道自己喜欢,但是真正学习的时候才发现,我要学习的东西还有很多 ...

  3. Apache DBUtils框架 结果处理器

    package com.itheima.dbutil; import java.util.List; import java.util.Map; import org.apache.commons.d ...

  4. jQuery笔记(二)

    $()下的常用方法 addClass():添加样式 removeClass():删除样式 $('div').addClass('box2 box4'); $('div').removeClass('b ...

  5. 团队项目设计完善&编码测试

    任务1:软件设计方案说明书 <基于弹幕评论的大数据分析平台软件设计方案说明书>仓库链接:点击跳转 任务2:搭建并配置项目集成开发环境: 开发环境 java version "1. ...

  6. Perfmon - Windows 自带系统监测工具(转)

    本文转自:http://blog.csdn.net/oscar999/article/details/7918385 一. 简述 可以用于监视CPU使用率.内存使用率.硬盘读写速度.网络速度等. Pe ...

  7. fetch API & upload file

    fetch API & upload file https://github.com/github/fetch/issues/89 https://stackoverflow.com/ques ...

  8. MyBatis分步查询的延迟加载

    延迟加载的概念只存在于分步查询时: 延迟加载的本质是为第一步查询返回的Java Bean创建了一个代理对象: 延迟加载的全局设置有两个: lazyLoadingEnabled,作用为设置select语 ...

  9. C# 妈妈再打我一下生成器

    设计背景 网上很火的一个"妈妈再打我一下"的漫画图片,给了网友无限的想象发挥空间,此小程序可以给图片添加配文的形式,快速生成图片 设计思路 GDI+ 绘图技术,在图片基础上添加文字 ...

  10. 在配置文件里面设置bean 那么在类里面就要提供set方法用以注入

    在配置文件里面设置bean 那么在类里面就要提供set方法用以注入