A. The Fair Nut and the Best Path

题意:给定有点权,有边权的树,让你选择一条链(也可以是只有一个点),使得点权之和-边权最大。

思路:裸的树形DP,我们用dp[i]表示i的子树里某个点到i这条链的最大值,然后用次大值更新答案即可。

具体的,每个dp[i]初始化=a[i];  对于i连出去的边-> (i,j),用它来更新答案,max(ans,dp[i]+dp[j]-len[i,j]);然后用它更新dp[i],max(dp[i],dp[i]-len[i,j]);

因为要的是最大值,肯定中途是大于等于0的,所以不会有中途油料耗尽的情况。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
using namespace std;
const int maxn=;
int a[maxn],Laxt[maxn],Next[maxn],To[maxn],Len[maxn],cnt;
ll dp[maxn],ans;
void add(int u,int v,int c)
{
Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v; Len[cnt]=c;
}
void dfs(int u,int f)
{
dp[u]=a[u]; if(a[u]>ans) ans=a[u];
for(int i=Laxt[u];i;i=Next[i]){
int v=To[i]; if(v==f) continue;
dfs(v,u);
ans=max(ans,dp[u]+dp[v]-Len[i]);
dp[u]=max(dp[u],dp[v]-Len[i]+a[u]);
}
}
int main()
{
int N,u,v,c;
scanf("%d",&N);
rep(i,,N) scanf("%d",&a[i]);
rep(i,,N-){
scanf("%d%d%d",&u,&v,&c);
add(u,v,c); add(v,u,c);
}
dfs(,);
printf("%lld\n",ans);
return ;
}

B:B. The Fair Nut and Strings

题意:给定长度为N的由'a','b'组成的字符串S,T,满足S<=T,给出数字K,让你在[S,T]中找K个字符串,使得他们的value最大,value是指满足至少是K个字符串之一的前缀的字符串的个数。

思路:把'a'看成0,'b'看成1,那么[S,T]之间的个数num=T-S+1;我们先使K=min(K,num)。

题意转化一下:想象有深度为N的完全二叉树,左儿子是0,右儿子是1,分别把S和T划出来,由根到因子划成一条线,然后在这两条线之间找K条线,答案就是K条线路过的节点个数。显然第i层的贡献=min(K,2^i-边缘), 即除了最前面的线,和最后面的线,由上一层到下一层,节点数我们都可以*2;

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
using namespace std;
const int maxn=;
char a[maxn],b[maxn]; int N,K,x[maxn],y[maxn];
bool check()
{
rep(i,,N) x[i]=b[i]-a[i];
for(int i=N;i>=;i--){
while(x[i]<) x[i]+=,x[i-]-=;
}
int tK=K;
for(int i=N;i>=;i--){
if(!tK) break;
y[i]=tK%; tK/=;
}
for(int i=;i<=N;i++) {
if(x[i]>y[i]) return true;
if(x[i]<y[i]) return false;
}
return true;
}
void get()
{
K=; for(int i=N;i>=;i--){
if(x[i]) K+=(1LL<<(N-i));
}
}
int main()
{
int pos=; ll ans=; int tmp=;
scanf("%d%d",&N,&K);
scanf("%s%s",a+,b+);
if(!check()) get();
rep(i,,N){
if(a[i]==b[i]) pos=i,ans++;
else break;
}
rep(i,pos+,N) {
if(tmp<=K){
tmp=tmp*;
if(a[i]=='b') tmp--;
if(b[i]=='a') tmp--;
}
ans=ans+min(tmp,K);
}
printf("%lld\n",ans);
return ;
}

E. The Fair Nut and Rectangles

(这个题太亏了,WA6,原因是没有用double!...不然这一次要上150分的....我的橙名啊

题意:给出N个左下角是原点的矩形,每个矩形有自己的val,保证矩形之间没有包含关系,让你选择一些矩形,使得他们的面积并-val之和最大。

思路:我们先给矩形排序,然后就是DP了,dp[i]=max(dp[j]+(y[i]-y[j])*x[i]-val[i]);

明显的斜率优化,但是注意维护队首时要超过long long,注意使用double!

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
using namespace std;
const int maxn=;
struct in{
ll x,y,val;
bool friend operator <(in w,in v){
return w.x<v.x;
}
}s[maxn];
ll ans,dp[maxn],head,top,q[maxn];
ll DY(ll i)
{
return dp[i];
}
ll getans(ll i,ll j){
return dp[j]+(s[i].y-s[j].y)*s[i].x-s[i].val;
}
int main()
{
int N; scanf("%d",&N);
rep(i,,N) scanf("%lld%lld%lld",&s[i].x,&s[i].y,&s[i].val);
sort(s+,s+N+);
for(ll i=N;i>=;i--){
while(head<top&&getans(i,q[head])<=getans(i,q[head+])) head++;
dp[i]=getans(i,q[head]); ans=max(ans,dp[i]);
while(top>&&1.0*(DY(i)-DY(q[top]))*(s[i].y-s[q[top-]].y)>1.0*(DY(i)-DY(q[top-]))*(s[i].y-s[q[top]].y)) top--;
q[++top]=i;
}
printf("%lld\n",max(ans,0LL));
return ;
}

(过了AB,涨了75分...E要是过了的话...

哭,菜死了

CF1083(div1)的更多相关文章

  1. CodeForces-329C(div1):Graph Reconstruction(随机&构造)

    I have an undirected graph consisting of n nodes, numbered 1 through n. Each node has at most two in ...

  2. 深入浅出JavaScript之闭包(Closure)

    闭包(closure)是掌握Javascript从人门到深入一个非常重要的门槛,它是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面写下我的学习笔记~ 闭包-无处不 ...

  3. CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  4. CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

    CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...

  5. CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)

    CSS3在CSS2.1的基础上新增加了许多属性,这里选择了较常用的一些功能与大家分享,帮助文档中有很详细的描述,可以在本文的示例中获得帮助文档. 一.阴影 1.1.文字阴影 text-shadow&l ...

  6. CSS3与页面布局学习总结(四)——页面布局大全

    一.负边距与浮动布局 1.1.负边距 所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见的功能 ...

  7. CSS3与页面布局学习总结(三)——BFC、定位、浮动、7种垂直居中方法

    一.BFC与IFC 1.1.BFC与IFC概要 BFC(Block Formatting Context)即“块级格式化上下文”, IFC(Inline Formatting Context)即行内格 ...

  8. CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset

    一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...

  9. HTML5 学习总结(一)——HTML5概要与新增标签

    一.HTML5概要 1.1.为什么需要HTML5 HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网.为了增强浏览器功能Flash被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电.触摸 ...

随机推荐

  1. 技术分享:SSH实战项目

    1.需求分析 系统概述: 企业人事管理系统. 要求对员工信息进行维护. 后台系统先登录,才能操作员工;添加.修改.删除. 没有登录,只能查看列表,不能操作. 功能分类: 1)[管理员模块] 注册/登录 ...

  2. Java设计模式(五)——适配器模式

    先举一个例子解释一下生活中的适配器模式:公司老总要求工程部经理来汇报一下公司内部的消防设备使用和维护情况.接到通知后,工程部经理老宋找了专门负责消防设备统计的维护人员小王,请他调出了去年全年的维护记录 ...

  3. spring boot 2.0+ 错误页面配置

    如果访问了错误的路径,或者后台报错 如果没有一个统一的页面! 或者说页面上展示一堆报错信息,既影响美观,又对用户不友好! 那么如何配置? 定义 ErrorPageConfig,配置错误状态与对应访问路 ...

  4. 20170609批量生成WORD合同

    Sub NextSeven_CodeFrame() Application.ScreenUpdating = False Application.DisplayAlerts = False Appli ...

  5. 基于DOMContentLoaded实现文档加载完成后执行的方法

    我们有时可能需要一些在页面加载完成之后执行的方法,其实js原生就提供了onload方法,所以我们最简单的办法就是直接给onload赋值一个函数,在页面加载完成之后就会自动执行 widnow.onloa ...

  6. devilbox(三):在docker中启动带密码的redis数据库

    背景概述: 之前是使用docker搭建了一套集成的开发环境devilbox,也说了这个环境可以自定义.其实搭建这个环境一是为了练习docker使用,二是搭建我们测试环境,主要用到各种数据库,然而安装教 ...

  7. 在centos7上安装gcc、node.js(源码下载)

    一.在centos7中安装node.js https://www.cnblogs.com/lpbottle/p/7733397.html 1.从源码下载Nodejs cd /usr/local/src ...

  8. SSH 远程端口转发

    既然"本地端口转发"是指绑定本地端口的转发,那么"远程端口转发"(remote forwarding)当然是指绑定远程端口的转发. 还是接着看上面那个例子,ho ...

  9. EchoService

    dubbo为consumer端的代理对象实现了EchoService接口. 使用示例: <dubbo:reference id="hello" interface=" ...

  10. sgu 130Circle dp

    130. Circle time limit per test: 0.25 sec. memory limit per test: 4096 KB On a circle border there a ...