博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017CCPC'S Xiangtan
阅读量:5261 次
发布时间:2019-06-14

本文共 3769 字,大约阅读时间需要 12 分钟。

Time:Solo


A

题意

 

分析

 


B

题意

 

分析

 


C

题意

 

分析

 


D

签到 


E

题意

 

分析

ym:前缀和排序后贪心取即可,注意要0加进去,表示到起点开始!! 

#include
#define ll long longusing namespace std;int t,a[100007],sum[100007],n,m,c;bool vis[100007];ll ans=0;int main(){ while(scanf("%d%d%d",&n,&m,&c)!=EOF) { ans=0; memset(sum,0,sizeof(sum)); memset(vis,false,sizeof(vis)); // scanf("%d%d%d",&n,&m,&c); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i]; } sort(sum,sum+n+1); int l=0,r=n; ll tmp=0; for(int i=1;i<=m;i++) { tmp+=sum[r]-sum[l]-c; r--; l++; ans=max(ans,tmp); } cout<
<

F

题意

 

分析

 


G

题意

 

分析

 ym:贪心的将左括号变成右括号,有优先队列贪心的维护一下这个过程即可

#include
#define ll long longusing namespace std;const int maxn = 1e5+7;char s[5];ll sum[maxn];struct node{ ll num,w; node(){} node(int x,int y){num=x,w=y;} friend bool operator < (node a,node b) { return a.w>b.w; }}a[maxn];priority_queue
q;int n;ll ans=0;int main(){ while(scanf("%d",&n)!=EOF) { ans=0; while(!q.empty())q.pop(); for(int i=1;i<=n;i++) { scanf("%lld%s%lld",&a[i].num,s,&a[i].w); sum[i]=sum[i-1]+a[i].num; if(s[0]=='(') { ans+=a[i].w*a[i].num; a[i].w=-a[i].w; } } ll l=0; for(int i=1;i<=n;i++) { q.push(a[i]); ll ca=(sum[i]+1)/2-l; l=(sum[i]+1)/2; while(ca) { node now=q.top(); q.pop(); if(now.num>ca) { ans+=now.w*ca; now.num-=ca; ca=0; q.push(now); } else { ans+=now.w*now.num; ca-=now.num; } } } printf("%lld\n",ans); } return 0;}

H

题意

 

分析

ym:树上任意一点距离最远的点一定是树的直径两个点中的一个,三次dfs即可

#include
#define ll long longusing namespace std;const int maxn = 2e5+7;int tot,head[maxn*2],nxt[maxn*2],to[maxn*2];ll w[maxn*2];int n,u,v;ll c;ll maxx;int ml,mr;ll d1[maxn],d2[maxn],ans;void add(int u,int v,ll c){ to[++tot]=v; w[tot]=c; nxt[tot]=head[u]; head[u]=tot;}void dfs1(int x,int fa,ll sum){ if(sum>maxx) { maxx=sum; ml=x; } for(int i=head[x];i;i=nxt[i]) { int v=to[i]; if(v==fa) continue; dfs1(v,x,sum+w[i]); }}void dfs2(int x,int fa,ll sum){ d1[x]=sum; if(sum>maxx) { maxx=sum; mr=x; } for(int i=head[x];i;i=nxt[i]) { int v=to[i]; if(v==fa) continue; dfs2(v,x,sum+w[i]); }}void dfs3(int x,int fa,ll sum){ d2[x]=sum; for(int i=head[x];i;i=nxt[i]) { int v=to[i]; if(v==fa) continue; dfs3(v,x,sum+w[i]); }}int main(){ while(scanf("%d",&n)!=EOF) { if(n==0) break; ans=0; tot=0; memset(d1,0,sizeof(d1)); memset(d2,0,sizeof(d2)); memset(head,0,sizeof(head)); memset(nxt,0,sizeof(nxt)); memset(w,0,sizeof(w)); memset(to,0,sizeof(to)); for(int i=1;i<=n-1;i++) { scanf("%d%d%lld",&u,&v,&c); add(u,v,c),add(v,u,c); } maxx=0; dfs1(1,0,0); maxx=0; dfs2(ml,0,0); maxx=0; dfs3(mr,0,0); ans=d1[mr]; for(int i=1;i<=n;i++) { if(i!=mr&&i!=ml) ans+=max(d1[i],d2[i]); } ///ans+=max(max(d1[ml],d1[mr]),max(d2[ml],d2[mr])); cout<
<

I

ym:猜一下???


J

题意

 

分析

 


Summary

Ym

Czh

转载于:https://www.cnblogs.com/Deadline/p/8987166.html

你可能感兴趣的文章
Python 字典(Dictionary) 小菜鸟学Python
查看>>
隐式类型转换规则
查看>>
Linux Shell命令-----VI
查看>>
APS系统如何让企业实现“多赢”?看高博通信是怎么做的
查看>>
ERROR StatusLogger No log4j2 configuration file found. Using default configuration
查看>>
POJ 1321 DFS
查看>>
Linux下查看文件和文件夹大小 删除日志
查看>>
我的OI生涯 第三章
查看>>
springboot-shiro chapter03 login
查看>>
linux基本命令(1) 开关机操作
查看>>
第十周
查看>>
block,inline,inline-block的区别
查看>>
PLSQL连接Oracle数据库,使用instantclient_10_2客户端
查看>>
第13组通信2班028网络协议抓包分析报告
查看>>
[dp][前缀和][并查集] 洛谷 P3575 DOO-Around the world
查看>>
react 中的路由 属性exact
查看>>
AngularJs2 学习之路-笔记1-Atscript Ts ES6包含关系
查看>>
impala 四舍五入后转换成string后又变成一个double的数值解决(除不尽的情况)
查看>>
Wireshark基本介绍和学习TCP三次握手
查看>>
关于静态方法与非静态方法的执行效率
查看>>