CF1083(div1)
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]);
#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 ;
}
题意:给定长度为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)的更多相关文章
- 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 ...
- 深入浅出JavaScript之闭包(Closure)
闭包(closure)是掌握Javascript从人门到深入一个非常重要的门槛,它是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面写下我的学习笔记~ 闭包-无处不 ...
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
- CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)
CSS3在CSS2.1的基础上新增加了许多属性,这里选择了较常用的一些功能与大家分享,帮助文档中有很详细的描述,可以在本文的示例中获得帮助文档. 一.阴影 1.1.文字阴影 text-shadow&l ...
- CSS3与页面布局学习总结(四)——页面布局大全
一.负边距与浮动布局 1.1.负边距 所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见的功能 ...
- CSS3与页面布局学习总结(三)——BFC、定位、浮动、7种垂直居中方法
一.BFC与IFC 1.1.BFC与IFC概要 BFC(Block Formatting Context)即“块级格式化上下文”, IFC(Inline Formatting Context)即行内格 ...
- CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset
一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...
- HTML5 学习总结(一)——HTML5概要与新增标签
一.HTML5概要 1.1.为什么需要HTML5 HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网.为了增强浏览器功能Flash被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电.触摸 ...
随机推荐
- 手动添加 launcher 到 Ubuntu Unity
本来,启动程序之后,在左边的launcher bar点右键,[Lock to Launcher]就可以的. 但是,有时候因为某种原因,需要手工添加. 这时候,就要参考下面的文章了 http://ask ...
- Confluence 6 为用户管理连接 Confluence 到 Crowd
你可以连接你的 Confluence 应用程序到 Atlassian Crowd 或 a Jira (5.3 及后续版本)来管理你的用户和用户组以及针对他们的授权. Atlassian Crowd 是 ...
- Java基础-String和StringBuilder类型(11)
String类概述 字符串是由多个字符组成的一串数据字符串可以看成是字符数组 构造方法 public String(String original)public String(char[] value ...
- 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用
加密技术通常分为两大类:"对称式"和"非对称式". 对称性加密算法:对称式加密就是加密和解密使用同一个密钥.信息接收双方都需事先知道密匙和加解密算法且其密匙是相 ...
- 最小生成树(模板 Kruskal)
Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达 ...
- asp.net GridView多行表头的实现,合并表头
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == Da ...
- React脚手架create-react-app+elementUI使用
一.介绍 1.create-react-app是FaceBook官方发布了一个无需配置的.用于快速构建开发环境的脚手架工具. 2.优点 a.无需配置:官方的配置堪称完美,几乎不用你再配置任何东西,就可 ...
- 从输入URL到页面加载发生了什么
大体过程 浏览器的地址栏输入URL并按下回车 浏览器检查当前URL是否存在缓存,并比较缓存是否过期 DNS解析URL对应的IP 根据IP建立TCP连接(三次握手) HTTP发起请求 服务器处理请求,浏 ...
- spring cloud学习(七)Spring Cloud Config(续)
Spring Cloud Config(续) 个人参考项目 个人博客 : https://zggdczfr.cn/ 个人参考项目 : (整合到上一个案例中)https://github.com/Fun ...
- POJ 2109 巧妙解法
Int最大是10^9.所以一般思路是二分+高精度.但是double 范围是10^(-307)-10^308所以可以用double型.k^n=p.所以有k=p^(1/n). 见代码: #include& ...