CF1082A Vasya and Book

模拟一下即可

\(Code\ Below:\)

#include <bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
int n,x,y,d,ans; int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&n,&x,&y,&d);
if((x-y)%d==0) printf("%d\n",abs(x-y)/d);
else {
ans=inf;
if(y%d==1) ans=min(ans,(x-1)/d+y/d+1);
if((n-y)%d==0) ans=min(ans,(n-x-1)/d+(n-y)/d+1);
printf("%d\n",(ans==inf)?-1:ans);
}
}
return 0;
}

CF1082B Vova and Trophies

\(WA\) 了一次。。。

把所有的连续金牌都预处理出来,然后特判一下即可

\(Code\ Below:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
int n,st[maxn],ed[maxn],cnt,ans;
char a[maxn]; int main()
{
scanf("%d%s",&n,a+1);
int now=0;
for(int i=1;i<=n+1;i++){
if(a[i]=='G'){
if(now==0) st[++cnt]=i;
now++;
}
else if(now) ed[cnt]=st[cnt]+now-1,now=0;
}
if(cnt==0) ans=0;
else if(cnt==1) ans=ed[1]-st[1]+1;
else {
for(int i=1;i<=cnt;i++){
ans=max(ans,ed[i]-st[i]+2);
if(i>1&&ed[i-1]+2==st[i]){
if(cnt==2) ans=max(ans,ed[i]-st[i-1]);
else ans=max(ans,ed[i]-st[i-1]+1);
}
}
}
printf("%d\n",ans);
return 0;
}

CF1082C Multi-Subject Competition

贪心,若 \(>0\) 便算进前缀和中

\(Code\ Below:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
int n,m,s[maxn],r[maxn],sum[maxn],ans;
vector<int> v[maxn]; bool cmp(int a,int b){
return a>b;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d%d",&s[i],&r[i]);
v[s[i]].push_back(r[i]);
}
for(int i=1;i<=m;i++)
sort(v[i].begin(),v[i].end(),cmp);
int now;
for(int i=1;i<=m;i++){
now=0;
for(int j=0;j<v[i].size();j++){
now+=v[i][j];
if(now>0) sum[j+1]+=now;
else break;
}
}
for(int i=1;i<=n;i++)
ans=max(ans,sum[i]);
printf("%d\n",ans);
return 0;
}

CF1082D Maximum Diameter Graph

\(CF\) 考构造题。。。

先按度数排序,然后从后往前扫,贪心找最长的直径

\(Code\ Below:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=1000+10;
int n,m,x[maxn],y[maxn],tot; struct Element{
int val,id;
}e[maxn]; bool cmp(Element a,Element b){
return a.val<b.val;
} int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&e[i].val);
e[i].id=i;
}
sort(e+1,e+n+1,cmp);
int st=-1,pos,id;
for(int i=1;i<=n;i++){
if(e[i+1].val>1){
st=i;
break;
}
}
if(st==-1){
printf("NO\n");
return 0;
}
for(int i=st;i<=n-1;i++){
x[++tot]=e[i].id;
y[tot]=e[i+1].id;
e[i].val--;e[i+1].val--;
}
pos=st-1;
for(int i=n;i>=st;i--){
id=e[i].id;
while(e[i].val&&pos){
x[++tot]=e[i].id;
y[tot]=e[pos].id;
e[i].val--;e[pos].val--;
pos--;
}
if(pos==0) break;
}
if(pos>0||tot!=n-1) printf("NO\n");
else {
printf("YES %d\n%d\n",min(n-1,n-st+1),tot);
for(int i=1;i<=tot;i++)
printf("%d %d\n",x[i],y[i]);
}
return 0;
}

CF1082E Increasing Frequency

想了半天数据结构,结果居然是 \(O(n)\) 的解法。。。

问题等价于找一个区间 \([l,r]\),使整个序列 \(c\) 出现的次数+区间 \([l,r]\) 中出现最多的数的出现次数-区间 \([l,r]\) 中 \(c\) 出现的次数,然后 \(c\) 出现的次数可以直接前缀和 \(O(1)\) 算出,剩下的用最大子段和的思路 \(O(n)\) 扫一遍即可

\(Code\ Below:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=500000+10;
int n,m,c,a[maxn],sum[maxn],last[maxn],ans;
vector<int> v[maxn]; int main()
{
scanf("%d%d",&n,&c);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
m=max(m,a[i]);
sum[i]=sum[i-1]+(a[i]==c);
if(!last[a[i]]) v[a[i]].push_back(1);
else v[a[i]].push_back(1-(sum[i]-sum[last[a[i]]]));
last[a[i]]=i;
}
ans=sum[n];
int now=0,num=0;
for(int i=1;i<=m;i++){
if(i==c) continue;
now=0;
for(int j=0;j<v[i].size();j++){
now+=v[i][j];
num=max(num,now);
if(now<=0) now=1;
}
}
printf("%d\n",ans+num);
return 0;
}

CF1082F Speed Dial

占坑中

CF1082G Petya and Graph

最大权闭合子图,同 \([NOI2006]\) 最大获利。

因为选了边权一定会选点权,满足最大权闭合子图的性质。我们建一个超级源和超级汇,左边 \(m\) 个数表示 \(m\) 条边,超级源向其连容量为边权的边;右边 \(n\) 个数表示 \(n\) 个点,其向超级汇连容量为点权的边.然后原图中每条边向其两个端点连 \(inf\) 的边,表示选了边权必须选点权,最小割不可能将其割掉。又因为最小割等于最大流,所以最后的答案为 \(\sum_{i=1}^{m} val_i-maxflow\)

\(Code\ Below:\)

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=400000+10;
const int inf=0x3f3f3f3f;
int n,m,s,t,head[maxn],tot=1;
int dep[maxn],cur[maxn]; struct node{
int to,next,val;
}e[maxn]; inline void add(int x,int y,int w){
e[++tot].to=y;e[tot].val=w;
e[tot].next=head[x];head[x]=tot;
e[++tot].to=x;e[tot].val=0;
e[tot].next=head[y];head[y]=tot;
} int bfs(int s,int t){
queue<int> q;
for(int i=0;i<=t;i++)
cur[i]=head[i];
memset(dep,0x7f,sizeof(dep));
dep[s]=0;q.push(s);
int u,v;
while(!q.empty()){
u=q.front(),q.pop();
for(int i=head[u];i;i=e[i].next){
v=e[i].to;
if(dep[v]>inf&&e[i].val){
dep[v]=dep[u]+1;
q.push(v);
}
}
}
return dep[t]<inf;
} int dfs(int now,int t,int limit){
if(!limit||now==t) return limit;
int flow=0,f,v;
for(int i=cur[now];i;i=e[i].next){
cur[now]=i;v=e[i].to;
if(dep[v]==dep[now]+1&&(f=dfs(v,t,min(limit,e[i].val)))){
flow+=f;
limit-=f;
e[i].val-=f;
e[i^1].val+=f;
if(!limit) break;
}
}
return flow;
} int Dinic(){
int maxflow=0;
while(bfs(s,t))
maxflow+=dfs(s,t,inf);
return maxflow;
} signed main()
{
scanf("%I64d%I64d",&n,&m);
s=0;t=n+m+1;
int p,a,b,c,sum=0;
for(int i=1;i<=n;i++){
scanf("%I64d",&p);
add(i+m,t,p);
}
for(int i=1;i<=m;i++){
scanf("%I64d%I64d%I64d",&a,&b,&c);
sum+=c;add(s,i,c);
add(i,a+m,inf);add(i,b+m,inf);
}
printf("%I64d\n",sum-Dinic());
return 0;
}

CF1082解题报告的更多相关文章

  1. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  2. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  3. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  4. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  5. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  6. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  7. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  8. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

  9. LeetCode 解题报告索引

    最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中......                        ...

随机推荐

  1. JavaScript基础数据类型

    一.数值 1.JavaScript不区分整型和浮点型,就只有一种数字类型 2.还有一种NaN,表示不是一个数字(Not a Number) eg: parseInt("ABC")  ...

  2. shell for if

    #!/bin/bash ..} do ];then j="${i}" else j="${i}" fi echo $j >> venn.log ec ...

  3. java 模拟登录新浪微博(通过cookie)

    这几天一直在研究新浪微博的爬虫,发现爬取微博的数据首先要登录.本来打算是通过账号和密码模拟浏览器登录.但是现在微博的登录机制比较复杂.通过账号密码还没有登录成功QAQ.所以就先记录下,通过cookie ...

  4. GAME PROGRAMM

    SetConsoleTextAttribute consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); GetStdHandle(nStdHandle)//是返回 ...

  5. IntelliJ IDEA 2017版 编译器使用学习笔记(七) (图文详尽版);IDE快捷键使用;IDE代码重构(编写高质量代码)

    一.重构 重构变量:将语义模糊的变量名称改为更易理解的名称       修改变量名称,快键键 shift + F6 (输入要改的名字,所有位置相同的名字都会改变)               重构方法 ...

  6. git windows下载安装 (git命令)

    Set up git At the heart of GitHub is an open source version control system (VCS) called Git. Git is ...

  7. webservice之helloword(web)rs

    spring整合webservice 1.pom.xml文件 <dependencies> <!-- cxf 进行rs开发 必须导入 --> <dependency> ...

  8. 20169207《Linux内核原理与分析》第五周作业

    这周的任务主要分为两个方面,第一方面,学习MOOC网上视频第三讲并完成配套的实验.第二方面,学习课本的第四章和第六章. 首先从实验开始讲起,前期我们对Linux内核的源码做了一个简单的了解.包括Mai ...

  9. 【MySQL】死锁问题分析

    1.MySQL常用存储引擎的锁机制: MyISAM和MEMORY采用表级锁(table-level locking)   BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 ...

  10. mysql 中 datetime和 timestamp的区别

    DATETIME日期和时间的组合.支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'.MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DA ...