[SDOI2016]部分题选做
听说SDOI蛮简单的,但是SD蛮强的..
之所以是选做,是因为自己某些知识水平还不到位,而且目前联赛在即,不好花时间去学sa啊之类的..
bzoj4513储能表&bzoj4514数字配对
已写题解
BZOJ4515 07/28
感人的提交记录啊。。。。。。
| 1566875 | wxx_louisa | 4515 | Accepted | 36612 kb | 13936 ms | C++/Edit | 5099 B | 2016-07-28 23:51:33 |
| 1566874 | orzliyicheng | 4515 | Accepted | 36612 kb | 13708 ms | C++ | 5099 B | 2016-07-28 23:51:20 |
| 1566873 | wxx | 4515 | Accepted | 36604 kb | 13920 ms | C++ | 5099 B | 2016-07-28 23:50:52 |
| 1566871 | wxx | 4515 | Wrong_Answer | 35956 kb | 720 ms | C++ | 5028 B | 2016-07-28 23:41:29 |
| 1566859 | wxx | 4515 | Wrong_Answer | 35960 kb | 768 ms | C++ | 5065 B | 2016-07-28 23:14:24 |
| 1566848 | wxx_louisa | 4515 | Wrong_Answer | 35956 kb | 696 ms | C++/Edit | 4993 B |
2016-07-28 22:52:00 |
说实话我还真没想到这道题可以调这么久。。。。感觉身体被掏空。。。。
maintain()写错,A,B搞反,ins没调用。。。。树链剖分的时候dep比较错。。。top还每次忘记打。。。。。。zz
/**************************************************************
Problem: 4515
User: wxx_louisa
Language: C++
Result: Accepted
Time:13936 ms
Memory:36612 kb
****************************************************************/
#include<cstdio>
#include<algorithm>
#define ll long long
#define N 200005
#define M 400005
#define inf 123456789123456789ll
using namespace std;
int n,m;
ll ans;
,vet[N],head[N],son[N],size[N],top[N],id[N],tid[N],f[][],next[N],pri[N],dep[N];
ll dis[N],A[M],B[M],val[M],tag[M];
void add(int u,int v,int w)
{
edgenum++;vet[edgenum]=v;next[edgenum]=head[u];head[u]=edgenum;
pri[edgenum]=w;
}
ll min(ll a,ll b)
{
if(a<b)return a;else return b;
}
void build(int p,int st,int ed)
{
val[p]=inf;;
if(st<ed)
{
build(p+p,st,mid);build(p+p+,mid+,ed);
}
}
void dfs1(int u,int ff,int deep)
{
;dep[u]=deep;
)
{
int v=vet[e];
if(v!=ff){
dis[v]=dis[u]+pri[e];f[v][]=u;
dfs1(v,u,deep+);
if(size[v]>size[son[u]])son[u]=v;
size[u]+=size[v];
}
e=next[e];
}
}
void dfs2(int u,int ff,int anc)
{
top[u]=anc;
;i<=;i++)
{
<<i)>dep[u])break;
f[u][i]=f[f[u][i-]][i-];
}
int e=head[u];tot++;tid[u]=tot;id[tot]=u;
)return;
dfs2(son[u],u,anc);
)
{
int v=vet[e];
if(v!=ff&&v!=son[u]){
dfs2(v,u,v);
}
e=next[e];
}
}
void maintain(int p,int st,int ed)
{
]);else val[p]=inf;
if(tag[p])val[p]=min(val[p],min(dis[id[st]]*A[p],dis[id[ed]]*A[p])+B[p]);
//printf("main==%d %d %d %lld\n",p,st,ed,val[p]);
}
int lca(int x,int y)
{
if(dep[x]<dep[y])swap(x,y);
;k>=;k--)
{
<<k)>=dep[y]){
x=f[x][k];
}
if(dep[x]==dep[y])break;
}
;k>=;k--)
{
if(f[x][k]!=f[y][k]){
x=f[x][k];y=f[y][k];
}
}
];
return x;
}
void update(int p,int l,int r,ll a,ll b)
{
//printf("up===%d %d %d %lld %lld\n",p,l,r,a,b);
){tag[p]=;A[p]=a;B[p]=b;}else
{
ll x1=dis[id[l]]*a+b,y1=dis[id[r]]*a+b,x2=dis[id[l]]*A[p]+B[p],y2=dis[id[r]]*A[p]+B[p];
;
if(x1<=x2&&y1<=y2){
A[p]=a,B[p]=b;
}else if(x1>=x2&&y1>=y2)return;else if(a<A[p])
{
ll tmp=(b-B[p])/(A[p]-a)+;
if(tmp<=dis[id[mid]]){
swap(a,A[p]);swap(b,B[p]);update(p+p,l,mid,a,b);
},mid+,r,a,b);
}else{
ll tmp=(B[p]-b-)/(a-A[p]);
if(tmp>dis[id[mid]])
{
swap(a,A[p]);swap(b,B[p]);
update(p+p+,mid+,r,a,b);
}else update(p+p,l,mid,a,b);
}
}
maintain(p,l,r);//important!
}
void ins(int p,int l,int r,int st,int ed,ll a,ll b)
{
//printf("==%d %d %d %d %d %lld %lld\n",p,l,r,st,ed,a,b);
if(l==st&&r==ed){
update(p,l,r,a,b);return;
};
,l,r,mid+,ed,a,b);
,mid+,r,mid+,ed,a,b);
maintain(p,st,ed);
}
void query(int p,int l,int r,int st,int ed)
{
// printf("query===%d %d %d\n",p,l,r);
if(l==st&&r==ed){ans=min(ans,val[p]);return;}
if(tag[p])ans=min(ans,min(dis[id[l]]*A[p]+B[p],dis[id[r]]*A[p]+B[p]));
;
if(r<=mid)query(p+p,l,r,st,mid);else
,l,r,mid+,ed);else
query(p+p,l,mid,st,mid),query(p+p+,mid+,r,mid+,ed);
}
ll que(int x,int y)
{
ans=inf;
while(top[x]!=top[y]){
if(dep[top[x]]<dep[top[y]])swap(x,y);
query(,tid[top[x]],tid[x],,n);
x=f[top[x]][];
}
,tid[y],tid[x],,n);
return ans;
}
void work(int x,int y,ll a,ll b)
{
//printf("work==%d %d \n",x,y);
while(top[x]!=top[y])
{
,tid[top[x]],tid[x],,n,a,b);
x=f[top[x]][];
}
,tid[y],tid[x],,n,a,b);
}
int main()
{
scanf("%d%d",&n,&m);
;i<=n-;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);add(u,v,w);add(v,u,w);
}
dfs1(,,);dfs2(,,);
//for(int i=1;i<=n;i++)printf("===%d %d %d\n",son[i],tid[i],top[i]);
build(,,n);
while(m--)
{
int op;scanf("%d",&op);
)
{
int x,y;ll a,b;
scanf("%d%d%lld%lld",&x,&y,&a,&b);
int ff=lca(x,y);
ll tmp=dis[x]*a+b;work(x,ff,-a,tmp);
tmp=a*(dis[x]-dis[ff]*)+b;work(ff,y,a,tmp);
}else{
int x,y;
scanf("%d%d",&x,&y);int ff=lca(x,y);
printf("%lld\n",que(x,y));
}
}
//for(int i=1;i<=15;i++)printf("%lld ",val[i]);
}
bzoj4515
bzoj4517
数论题,我这种不会错排的数论白痴都能手推出来,这题应该谁都能写吧。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mo 1000000007
#define ll long long
#define N 1000100
using namespace std;
ll jie[N],g[N],f[N],ni[N];
ll quickmi(ll x)
{
ll tmp=,k=mo-,a=x;
)
{
==)
{
tmp=tmp*a%mo;
}
a=a*a%mo;
k/=;
}
return tmp;
}
ll cc(int n,int m)
{
return jie[n]*ni[m]%mo*ni[n-m]%mo;
}
int main()
{
jie[]=;
;i<=;i++)jie[i]=(jie[i-]*i)%mo;
ni[]=;ni[]=;
;i<=;i++)
{
ni[i]=quickmi(jie[i]);
}
f[]=;f[]=;f[]=;f[]=;
g[]=;g[]=;g[]=;g[]=;
;i<=;i++)
{
f[i]=g[i-]%mo;
g[i]=(f[i-]+g[i-])%mo*i%mo;
}
int cas,n,m;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d",&n,&m);
ll ans=cc(n,m)*f[n-m]%mo;
printf("%lld\n",ans);
}
}
bzoj4517
bzoj4518征途
单调队列斜率优化
蛮容易的T3,好久没写斜率优化
老毛病,大于小于等于又纠结不清了
#include<cstdio>
#include<cmath>
#define inf 1000000000
#include<algorithm>
#define N 3010
#define ll long long
using namespace std;
ll n,m;
ll q[N],s[N],f[N],a[N],dp[N];
bool pd1(int x,int k,int j)
{
//printf("%d %d %d\n",x,k,j);
ll fenzi=f[j]-f[k]+s[j]*s[j]-s[k]*s[k];
ll fenmu=(s[j]-s[k])*2ll;
//printf("===%d %d %d %d %d\n",x,fenzi,fenmu,k,j);
return x*fenmu>=fenzi;
}
int sqr(int x)
{
return x*x;
}
bool pd2(int k,int j,int i)
{
ll fenzi1=f[j]-f[k]+s[j]*s[j]-s[k]*s[k];
ll fenmu1=2ll*(s[j]-s[k]);
ll fenzi2=f[i]-f[j]+s[i]*s[i]-s[j]*s[j];
ll fenmu2=2ll*(s[i]-s[j]);
//printf("===%d %d %d %d\n",k,j,i,fenzi
return fenzi2*fenmu1<fenmu2*fenzi1;
}
int main()
{
scanf(]=;
;i<=n;i++)
{
scanf("%lld",&a[i]);
s[i]=s[i-]+a[i];
}
;i<=n;i++)f[i]=inf;f[]=;
;j<=m;j++)
{
,tail=;q[]=j-;
for(int i=j;i<=n;i++)
{
]))head++;
int u=q[head];
//printf("%d %d %d\n",i,j,u);
dp[i]=f[u]+sqr(s[i]-s[u]);
//printf("%d %d %d %d\n",i,j,u,dp[i]);
],q[tail],i))tail--;
++tail;q[tail]=i;
}
;i<=n;i++)f[i]=dp[i],dp[i]=inf;
}
//printf("%d\n",s[n]);
printf("%lld",m*f[n]-s[n]*s[n]);
}
bzoj4518
[SDOI2016]部分题选做的更多相关文章
- Atcoder 水题选做
为什么是水题选做呢?因为我只会水题啊 ( 为什么是$Atcoder$呢?因为暑假学长来讲课的时候讲了三件事:不要用洛谷,不要用dev-c++,不要用单步调试.$bzoj$太难了,$Topcoder$整 ...
- 贪心/构造/DP 杂题选做Ⅱ
由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...
- 贪心/构造/DP 杂题选做Ⅲ
颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...
- 贪心/构造/DP 杂题选做
本博客将会收录一些贪心/构造的我认为较有价值的题目,这样可以有效的避免日后碰到 P7115 或者 P7915 这样的题就束手无策进而垫底的情况/dk 某些题目虽然跟贪心关系不大,但是在 CF 上有个 ...
- 【SPOJ GSS】数据结构题选做
SPOJ GSS1 题意:给一个序列以及一些询问,每个是问\([l,r]\)中最大连续子序列和是多少. 思路:这个问题是以下问题的基础. 我们考虑用线段树来解决这个问题. 首先我们来想想如果要求出最大 ...
- 『CUDA C编程权威指南』第二章编程题选做
第一题 设置线程块中线程数为1024效果优于设置为1023,且提升明显,不过原因未知,以后章节看看能不能回答. 第二题 参考文件sumArraysOnGPUtimer.cu,设置block=256,新 ...
- [NOIP2017(TG/PJ)] 真题选做
[NOIPTG2017] 小凯的疑惑 题意 小凯有两种面值的金币,每种金币有无数个,求在无法准确支付的物品中,最贵的价值是多少金币. 分析 设两种金币面值分别为 $a$ 和 $b \; (a<b ...
- 期望dp好题选做
前言: 最近连考两场期望dp的题目,sir说十分板子的题目我竟然一点也不会,而且讲过以后也觉得很不可改.于是开个坑. 1.晚测10 T2 大佬(kat) 明明有\(O(mlog)\)的写法,但是\(m ...
- 课后选做题-MyOD
课后选做题-MyOD od命令的了解 功能 od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符.od命令系统默 ...
随机推荐
- 9.12/ css3拓展、js基础语法、程序基本知识、数据类型、运算符表达方式、语句知识点
css3拓展: <display:none> 将某个元素隐藏 <visibility:hidden> 也是将某个元素隐藏 <display:block&g ...
- 如何点击按钮后在加载外部的Js文件
或许有朋友遇到过,想等自己点击按钮之后才执行某一个js文件,那么,你运气好,看到了我的代码了哈哈, <html> <head> <title></title& ...
- solrconfig.xml和schema.xml说明
1. solrconfig.xml solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置. 1.1. datadir节点 ...
- 二、JavaScript语言--JS实践--信息滚动效果制作
运用JavaScript技术,掌握无缝滚动和歇间性滚动的制作方法. 一.marquee标签实现信息滚动 1 behavior滚动的方式 alternate:表示在两端之间来回滚动 scroll:表示由 ...
- 服务器知识----IIS架设问题
1,基本配置,应用程序池,路径等. 2,权限设置 Iuser IIS_users 只读权限 3,isapi映射 framework安装目录下 运行 aspnet_regiis.exe -i 注 ...
- CLR via C#(09)-扩展方法
对于一些现成的类,如果我们想添加一些新的方法来完善功能,但是不想改变已有的封装,也不想使用派生类,那么该怎么办呢?这里我们可以使用扩展方法. 一见钟情--初识扩展 扩展方法使您能够向现有类型“添加”方 ...
- MVC缓存01,使用控制器缓存或数据层缓存
对一些浏览频次多.数据量大的数据,使用缓存会比较好,而对一些浏览频次低,或内容因用户不同的,不太适合使用缓存. 在控制器层面,MVC为我们提供了OutputCacheAttribute特性:在数据 ...
- 攻城狮在路上(肆)How tomcat works(三) 连接器:Connector
在介绍中提到,Catalina中有两个主要的模块:连接器和容器.本章中你将会写一个可以创建更好的请求和响应对象的连接器,用来改进第2章中的程序.一个符合Servlet 2.3和2.4规范的连接器必须 ...
- PHP+Nginx环境搭配
一.Nginx安装 nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好. u ...
- .NET Nancy 详解(一) 初识
Nancy 是一个轻量级的,简单粗暴的framework用来构建基于HTTP的各种服务,兼容.Net和Mono.Nancy的整套设计理念是基于"super-duper-happy-path& ...