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个袜子 每个袜子都有 ...
随机推荐
- APACHE 在windows下的配置
目前apache在windows下只支持到2.2 所以php必须下载相应的线程安全的 然后打开apache的配置页面 listen directory 和 load_module修改 httpd -k ...
- 利息?hii
#include<stdio.h> void main() { for(;;) { float bj,lx=0,ll,d; printf("输入本金:"); scanf ...
- SQL中的OpenXML使用
DECLARE @idoc int ) SET @doc =' <ROOT> <Customer CustomerID="VINET" ContactName=& ...
- UDP传输
@@@基于UDP的客服端代码 public class Service { // 服务器 public static void main(String[] args) { DatagramPacket ...
- 学习solr
1.下载地址 http://apache.opencas.org/lucene/solr/
- socketserver 分块记录
网络编程 Socket(TCP,IP)套接字 服务端 运行起来, 客户端 客户端 客户端 客户端 服务端: import socket sk = socket.socket() #绑定端口号 sk.b ...
- 使用Support Vector Machine
使用svm(Support Vector Machine)中要获得好的分类器,最重要的是要选对kernel. 常见的svm kernel包括linear kernel, Gaussian kernel ...
- 调整ESX的VMFS磁盘格式的块大小,让单个虚拟磁盘支持更大容量
调整ESX的VMFS磁盘格式的块大小,让单个虚拟磁盘支持更大容量 前因:客户搭建了VMware ESX企业版的测试平台:有一天接到一个需求,是测试数据库的,需要一个300G的磁盘. 解决过程: 1.按 ...
- OC基础--self关键字
Self的使用: 1 self不能离开类 离开类之后没有任何意义 2 self会自动区分类方法和对象方法 3 使用self的时候只需要关注self在哪一个方法中 如果在类方法中使用self 那 ...
- 最近用到js筛选一个url的域名部分(草创)
var TLD = ['com','net','org','gov','edu','mil','biz','name','info','mobi','cn','hk']; var host = ''; ...