Codeforces Round #526 Div. 1 自闭记
日常猝死。
A:f[i]表示子树内包含根且可以继续向上延伸的路径的最大价值,统计答案考虑合并两条路径即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 300010
#define inf 10000000000000000ll
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,p[N],t;
ll f[N][],a[N],ans;
struct data{int to,nxt,len;
}edge[N<<];
void addedge(int x,int y,int z){t++;edge[t].to=y,edge[t].nxt=p[x],edge[t].len=z,p[x]=t;}
void dfs(int k,int from)
{
f[k][]=f[k][]=a[k];
ll mx=-inf,mx2=-inf;
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=from)
{
dfs(edge[i].to,k);
ll x=f[edge[i].to][]-edge[i].len;
if (x>mx) mx2=mx,mx=x;
else if (x>mx2) mx2=x;
}
f[k][]=max(mx+a[k],a[k]);
f[k][]=max(f[k][],f[k][]);
f[k][]=max(f[k][],a[k]+mx+mx2);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
n=read();
for (int i=;i<=n;i++) a[i]=read();
for (int i=;i<n;i++)
{
int x=read(),y=read(),z=read();
addedge(x,y,z),addedge(y,x,z);
}
dfs(,);
for (int i=;i<=n;i++) ans=max(ans,f[i][]),ans=max(ans,f[i][]);
cout<<ans;
return ;
}
B:每次一有还不错的开局马上就自闭了。一直都在正解附近徘徊愣是过了1h才pp。没救了。如果一个字符串最早在第i位与其他字符串都不同,其可以提供n-i+1的贡献。那么贪心的尽量让高位不同。问题在于如何统计贡献。将a看成0,b看成1后,变成两个二进制数。对于每一个前缀,将两个前缀二进制数相减得到的就是这段前缀的不同串数量。减去上一位的就可以得到在该位新出现的前缀个数。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 500010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,a[N],b[N];
ll ans,tot,f[N],m;
int main()
{
#ifndef ONLINE_JUDGE
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
#endif
n=read(),m=read();
for (int i=;i<=n;i++) a[i]=getc()-'a';
for (int i=;i<=n;i++) b[i]=getc()-'a';
ll x=,y=;
for (int i=;i<=n;i++)
{
x=x<<|a[i],y=y<<|b[i];
f[i]=y-x+;
ans+=1ll*(min(m,f[i])-f[i-])*(n-i+);
if (f[i]>m) break;
}
cout<<ans;
return ;
}
E:E过的人最多当然是看E了。冷静了一会发现排个序之后就成了一个序列问题,可以瞎dp了,式子写出来发现一发斜率优化就完了。
然后我也不知道发生了啥。
按横坐标从小到大排序,那么如果选择了某个矩形,其后面的矩形产生的贡献就与前面的矩形无关了。于是有一发显然的dp,即设f[i]为选择第i个矩形时前i个矩形的最大价值,有f[i]=max{f[j]+(xi-xj)yi-ai}。式子是裸的不能再裸的斜率优化,就做完了。鬼知道发生了啥啊?
然后终测完了终于看到了第三个点是啥……woc ai是可以爆int的啊?怎么想的到啊?以后干脆还是都define int long long算了反正cf机子不虚……心态爆炸。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cassert>
using namespace std;
#define ll long long
#define N 1000010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
ll read()
{
ll x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,q[N];
ll f[N];
struct data
{
int x,y;ll v;
bool operator <(const data&a) const
{
return x<a.x;
}
}a[N];
long double calc(ll x,ll y)
{
return (long double)(f[y]-f[x])/(a[y].x-a[x].x);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("e.in","r",stdin);
freopen("e.out","w",stdout);
#endif
n=read();
for (int i=;i<=n;i++) a[i].x=read(),a[i].y=read(),a[i].v=read();
sort(a+,a+n+);
int head=,tail=;q[]=;
for (int i=;i<=n;i++)
{
ll t=1ll*a[i].y*a[i].x-a[i].v;
while (head<tail&&calc(q[head],q[head+])>a[i].y) head++;
f[i]=f[q[head]]+t-1ll*a[q[head]].x*a[i].y;
while (head<tail&&calc(q[tail-],q[tail])<calc(q[tail],i)) tail--;
q[++tail]=i;
}
ll ans=;
for (int i=;i<=n;i++) ans=max(ans,f[i]);
cout<<ans;
return ;
}
完全能翻的场还是莫名其妙就跪掉了,自闭。
result:rank 146 rating -3
Codeforces Round #526 Div. 1 自闭记的更多相关文章
- Educational Codeforces Round 58 Div. 2 自闭记
明明多个几秒就能场上AK了.自闭. A:签到. #include<iostream> #include<cstdio> #include<cmath> #inclu ...
- Codeforces Round #554 (Div. 2)自闭记
A 签到 #include<bits/stdc++.h> using namespace std; ],t[],ans; int main() { scanf("%d%d&quo ...
- Codeforces Round #545 Div. 1自闭记
A:求出该行该列各有多少个比其小的取max,该行该列各有多少个比其大的取max,加起来即可. #include<iostream> #include<cstdio> #incl ...
- Codeforces Round #528 Div. 1 自闭记
整天自闭. A:有各种讨论方式.我按横坐标排了下然后讨论了下纵坐标单调和不单调两种情况.写了15min也就算了,谁能告诉我printf和cout输出不一样是咋回事啊?又调了10min啊?upd:突然想 ...
- Codeforces Round #567 (Div. 2)自闭记
嘿嘿嘿,第一篇文章,感觉代码可以缩起来简直不要太爽 打个div2发挥都这么差... 平均一题fail一次,还调不出错,自闭了 又一次跳A开B,又一次B傻逼错误调不出来 罚时上天,E还傻逼了..本来这场 ...
- Codeforces Round #530 Div. 1 自闭记
A:显然应该让未确定的大小尽量大.不知道写了啥就wa了一发. #include<iostream> #include<cstdio> #include<cmath> ...
- Codeforces Round #525 Div. 2 自闭记
A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...
- [Codeforces Round #526 (Div. 2)]
https://codeforces.com/contest/1084 A题 数据量很小,枚举就行 #include<iostream> #include<cstdio> #i ...
- Codeforces Round #526 (Div. 2) E. The Fair Nut and Strings
E. The Fair Nut and Strings 题目链接:https://codeforces.com/contest/1084/problem/E 题意: 输入n,k,k代表一共有长度为n的 ...
随机推荐
- Django 构建一个项目
一.创建django程序 终端命令:django-admin startproject fahaicmd IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: python man ...
- 《杜增强讲Unity之Tanks坦克大战》7-坦克血条
7 坦克血条 点击菜单GameObject->UI->Slider创建Slider 选中EventSystem,设置Horizontal Axis为HorzontalUI,Vertic ...
- Java线程wait和sleep的区别
Java中调用wait方法或者sleep方法都可以让线程进入waitint或者time-waiting状态,但是它们还是 有所不同的: wait是Object中的方法,而sleep则是Thread中的 ...
- 2018NOIP爆0记第一弹
初赛篇 选择即王道 迪杰斯特拉那道题的A选项自己yy一下觉得甚是不妥,就没选 就和30分完美选择题擦肩而过. 填空最后一题不太会搞,就跳过了,最后蒙了个512上去...其实还有点接近的... 5分 然 ...
- 匹配追踪算法(MP)简介
图像的稀疏表征 分割原始图像为若干个\[\sqrt{n} \times \sqrt{n}\]的块. 这些图像块就是样本集合中的单个样本\(y = \mathbb{R}^n\). 在固定的字典上稀疏分解 ...
- tensorflow-gpu与CUDA、CUDNN的版本问题
折腾了将近两天的时间,终于搞好了,感觉把所有的坑都踩过了一遍.....泪牛满面 1.先安装CUDA,并安装,尽量不要下载最新版本的,坑,本机可以下载最新本10.0版本,但与CUDNN和tensorfl ...
- [Github] Github使用教程
前言 Github是一个面向开源及私有软件项目的托管平台.它可以免费使用,并且速度快速,拥有超多的用户.是目前管理软件开发和发现已有代码的首选平台.下面将向Github新手介绍相关操作. 正文 注册 ...
- SQL-Server collation, what is it and how to change db/column collation
The thing about collations is that although database have it's own collation, every table, and every ...
- Django_csrf
CSRF攻击介绍 CSRF 攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作.比如说,受害者 Bob 在银行有一笔存款,通过对银行的 ...
- 20172308 实验三《Java面向对象程序设计 》实验报告
20172308 2017-2018-2 <程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 周亚杰 学号:20172308 实验教师:王 ...