Codeforces Round #376 (Div. 2)
A 模拟
#include <cstdio>
#include <cstring>
int Ans;
char Str[];
inline int Abs(int x) {return x>?x:-x;}
inline int Min(int x,int y) {return x>y?y:x;}
int main()
{
char u='a'; Ans=;
scanf("%s",Str+);
for (int i=;i<=strlen(Str+);i++)
Ans+=Min(Abs(Str[i]-u),-Abs(Str[i]-u)),u=Str[i];
printf("%d\n",Ans);
return ;
}
A
B 贪心
#include <cstdio>
int n,a[];
bool Flag;
int main()
{
scanf("%d",&n); Flag=true;
for (int i=;i<=n;i++) scanf("%d",&a[i]);
for (int i=;i<n;i++)
{
if (a[i]&)
{
if (a[i+]==)
{
Flag=false;
break;
}
a[i+]--;
}
}
if (a[n]&) Flag=false;
if (Flag) puts("YES"); else puts("NO");
return ;
}
B
C 并查集+暴力 没写路径压缩T了好久..
#include <cstdio>
#include <cstring>
#include <vector>
#define pb push_back
using namespace std;
const int Maxn=;
int Father[Maxn],c[Maxn],Last[Maxn],l[Maxn],r[Maxn],n,m,k,tot,Cnt[Maxn],Ans,num[Maxn];
vector<int> V[Maxn];
int GetFather(int x)
{
if (x==Father[x]) return x;
return Father[x]=GetFather(Father[x]);
}
inline void Merge(int x,int y) {Father[GetFather(x)]=GetFather(y);}
inline int Max(int x,int y) {return x>y?x:y;}
int main()
{
scanf("%d%d%d",&n,&m,&k); tot=;
for (int i=;i<=n;i++) scanf("%d",&c[i]);
for (int i=;i<=n;i++) Father[i]=i;
for (int i=;i<=m;i++) scanf("%d%d",&l[i],&r[i]),Merge(l[i],r[i]);
for (int i=;i<=n;i++) if (Father[i]==i) num[i]=++tot;
for (int i=;i<=n;i++) V[num[GetFather(i)]].pb(c[i]);
Ans=;
for (int i=;i<=tot;i++)
{
int Ret=,Tmp=V[i].size();
for (int j=;j<Tmp;j++) Cnt[V[i][j]]=;
for (int j=;j<Tmp;j++)
{
Cnt[V[i][j]]=Cnt[V[i][j]]+;
Ret=Max(Ret,Cnt[V[i][j]]);
}
Ans+=Tmp-Ret;
}
printf("%d",Ans);
return ;
}
C
D 模拟+看了好久的题意 就是一个操作是每个数+1,是的最终的序列为字典序,比较的是序列,比较相邻两个得出可以在的区间求交即可.
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#define pb push_back
using namespace std;
const int Maxn=;
int n,c,Len[Maxn],cnt,B[Maxn],x;
vector<int> V[Maxn];
inline int Min(int x,int y) {return x>y?y:x;}
void Work(int x,int y)
{
int LEN=Min(Len[x],Len[y]);
for (int i=;i<LEN;i++)
{
if (V[x][i]==V[y][i]) continue;
if (V[x][i]<V[y][i])
{
B[]++,B[c-V[y][i]+]--;
B[c-V[x][i]+]++,B[c]--;
} else B[c-V[x][i]+]++,B[c-V[y][i]+]--;
cnt++; return;
}
if (Len[x]>Len[y])
{
puts("-1");
exit();
}
}
int main()
{
scanf("%d%d",&n,&c);
for (int i=;i<=n;i++)
{
scanf("%d",&Len[i]);
for (int j=;j<=Len[i];j++) scanf("%d",&x),V[i].pb(x);
if (i!=) Work(i-,i);
}
int Sum=;
for (int i=;i<c;i++)
{
Sum+=B[i];
if (Sum==cnt)
{
printf("%d\n",i);
return ;
}
}
puts("-1");
return ;
}
D
E 直接模拟..
#include<bits/stdc++.h>
using namespace std;
int n,tot,i,a[];
inline int Max(int x,int y) {return x>y?x:y;}
int main()
{
scanf("%d",&n);
for(i=;i<=n;i++) scanf("%d",&a[i]),a[i]+=a[i-];
tot=a[n];
for(i=n-;i>;i--) tot=Max(tot,a[i]-tot);
printf("%d\n",tot);
}
E
F 枚举前缀就可以了
#include <cstdio>
#define LL long long
const LL Maxn=;
LL n,x,vis[Maxn+],Sum[Maxn+],Ans;
int main()
{
scanf("%I64d",&n);
for (LL i=;i<=n;i++) scanf("%I64d",&x),vis[x]++;
for (LL i=;i<=Maxn;i++) Sum[i]=Sum[i-]+vis[i];
Ans=;
for (LL i=;i<=Maxn;i++)
if (vis[i]>)
{
LL Res=,t=Maxn/i;
for (LL j=;j<=t;j++) Res+=(Sum[j*i-]-Sum[(j!=)?j*i-i-:j*i-i])*(j-)*i;
Res+=(Sum[Maxn]-Sum[t*i-])*t*i;
if (Res>Ans) Ans=Res;
}
printf("%I64d\n",Ans);
return ;
}
F
Codeforces Round #376 (Div. 2)的更多相关文章
- Codeforces Round #376 (Div. 2) D. 80-th Level Archeology —— 差分法 + 线段扫描法
题目链接:http://codeforces.com/contest/731/problem/D D. 80-th Level Archeology time limit per test 2 sec ...
- Codeforces Round #376 (Div. 2) C题 Socks(dsu+graphs+greedy)
Socks Problem Description: Arseniy is already grown-up and independent. His mother decided to leave ...
- Codeforces Round #376 (Div. 2)F. Video Cards(前缀和)
题目链接:http://codeforces.com/contest/731/problem/F 题意:有n个数,从里面选出来一个作为第一个,然后剩下的数要满足是这个数的倍数,如果不是,只能减小为他的 ...
- Codeforces Round #376 (Div. 2) C. Socks---并查集+贪心
题目链接:http://codeforces.com/problemset/problem/731/C 题意:有n只袜子,每只都有一个颜色,现在他的妈妈要去出差m天,然后让他每天穿第 L 和第 R 只 ...
- Codeforces Round #376 (Div. 2) F. Video Cards 数学 & 暴力
http://codeforces.com/contest/731/problem/F 注意到一个事实,如果你要找一段区间中(从小到大的),有多少个数是能整除左端点L的,就是[L, R]这样.那么,很 ...
- Codeforces Round #376 (Div. 2) F. Video Cards —— 前缀和 & 后缀和
题目链接:http://codeforces.com/contest/731/problem/F F. Video Cards time limit per test 1 second memory ...
- Codeforces Round #376 (Div. 2) A. Night at the Museum —— 循环轴
题目链接: http://codeforces.com/contest/731/problem/A A. Night at the Museum time limit per test 1 secon ...
- Codeforces Round #376 (Div. 2) C. Socks —— 并查集 + 贪心
题目链接:http://codeforces.com/contest/731/problem/C 题解: 1.看题目时,大概知道,不同的袜子会因为要在同一天穿而差生了关联(或者叫相互制约), 其中一条 ...
- Codeforces Round #376 (Div. 2) C D F
在十五楼做的cf..一会一断...比赛的时候做出了ABCF 就没有时间了 之后没看题解写出了D..E是个神奇的博弈(递推或者dp?)看了题解也没有理解..先写了CDF.. C 有n个袜子 每个袜子都有 ...
随机推荐
- 推荐两个谷歌的json-view插件(附带下载分享地址)
1.JSONView 网盘下载地址:http://pan.baidu.com/s/1hrGlaVa 效果图: 2.JSON-handle 网盘下载地址:http://pan.baidu.com/s/1 ...
- 定位 position: absolute & relative
[position:absolute] 意思是绝对定位,他默认参照浏览器的左上角,配合TOP.RIGHT.BOTTOM.LEFT(下面简称TRBL)进行定位,有以下属性: 1)如果没有TRBL,以父级 ...
- java 选择排序
import java.util.Scanner; public class SelectionSort { public static void sort(int[] a, int n){ if(n ...
- cocoapods Analyzing dependencies 问题的解决方案
pod install --verbose --no-repo-update pod update --verbose --no-repo-update 修改就ok了
- 运行DbVisualizer报the java_home environment viariable does not point to a working 32-bit JDK OR JRE错误
报这个错误的根本原因就是DbVisualizer和JDK的版本不一致,那么知道原因,修改起来就方便了,要么修改DbVisualizer的版本,要么修改JDK的版本. 1.JDK7 64位 那么就在Db ...
- spring+mybatis+springmvc的配置
1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?><web-app version=&qu ...
- 关于vs调试中kaze时出现的问题
在kaze程序中,调试时,会出现内存释放出现问题,导致调试失败. 解决方法:将主函数所在的源文件中的所有函数中的vector声明的向量都放在主函数外面,成为全局变量,让系统自己释放,再次调试就不会出现 ...
- 高手总结的“恋爱法”学习Linux系统,效果更好。
如果你恋爱了,那你一定非常喜欢她.了解她,知道她喜欢吃什么玩什么,知道她需要什么,在她生气的时候可以哄她开心,一切尽在你的手指中.那你想学好Linux吗?喜欢Linux吗?你懂她吗?你有喜欢Linux ...
- 浅谈学习掌握linux系统的优势
Linux系统让我们懂得了共享.开放.自由可以让人类生活的更加美好,开源精神是一种让每个从事Linux行业的技术人员从骨子里自豪的情怀,开源产品的兴盛受益于开源社区的强壮根基.Linux真的给了我很多 ...
- apache和nginx
虽然nginx使用较少 还是写写文章,记录下 nginx是异步非阻塞,apache是阻塞的. apache动态页面比nginx好. 由于nginx的高并发性(使用epoll模型),所以出来静态页面性能 ...