BZOJ一句话
一句话题解集合。
1061: [Noi2008]志愿者招募
单纯形,运用对偶原理转化过来,变成标准形然后单纯性裸上即可。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstring>
#include<algorithm>
const double eps=1e-;
const double oo =1e9;
double a[][];
double b[];
double c[];
int n,m;
int read(void)
{
int ans=;
int f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')f=-f;
ch=getchar();
}
while(ch<=''&&ch>='')
{
ans=ans*+ch-'';
ch=getchar();
}
return ans*f;
}
void pivot(double&ans,int l,int e)
{
b[l]/=a[l][e];
for(int i=;i<=n;i++)if(i!=e)a[l][i]/=a[l][e];
a[l][e]=1.00/a[l][e];
for(int i=;i<=m;i++)
if(fabs(a[i][e])>eps&&i!=l)
{
b[i]-=b[l]*a[i][e];
for(int j=;j<=n;j++)if(j!=e)
a[i][j]-=a[i][e]*a[l][j];
a[i][e]=-a[i][e]*a[l][e];
}
ans+=c[e]*b[l];
for(int i=;i<=n;i++)if(i!=e)c[i]-=c[e]*a[l][i];
c[e]=-c[e]*a[l][e];
return ;
}
double simplex(void)
{
double ans=;
while(true)
{
int e,l;
for(e=;e<=n;e++)if(c[e]>eps)break;
if(e>n)return ans;
double mins=oo;
for(int i=;i<=m;i++)
if(a[i][e]>eps&&mins>b[i]/a[i][e])
mins=b[i]/a[i][e],l=i;
if(mins>=oo-eps)return oo;
pivot(ans,l,e);
}
return ans;
}
int main()
{
// freopen("a.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)c[i]=read();
for(int i=;i<=m;i++)
{
int s,t;
scanf("%d%d",&s,&t);
for(int j=s;j<=t;j++)
{
if(j<)j=;if(j>n)break;
a[i][j]=;
}
b[i]=read();
}
printf("%d\n",(int)(simplex()+0.5));
return ;
}
1061
1197: [HNOI2006]花仙子的魔法
神TM递推题,考虑升维的计算仍然是类似的,就有递推式$f_{[i][j]}=f_{[i-1][j-1]}+f_{[i][j-1]}$
#include<cstdio>
typedef long long lnt;
lnt dp[][];
int n,m;
int main()
{
// freopen("flower.in","r",stdin);
// freopen("flower.out","w",stdout);
scanf("%d%d",&m,&n);dp[][]=;
for(int i=;i<=m;i++)dp[][i]=i*;
for(int i=;i<=n;i++)
{
dp[i][]=;
for(int j=;j<=m;j++)dp[i][j]=dp[i][j-]+dp[i-][j-];
}
printf("%lld\n",dp[n][m]);
return ;
}
2161: 布娃娃
偏不写扫描线,考虑对于同一种p,询问编号越小越先得到答案,先离散化按p排序建立线段树,询问挂在叶节点上,维护区间最小询问。
按照c从大到小的顺序加入查询,区间-1,若最小值变成0,则说明这个区间是某个p的答案,二分删除这个询问。
易知每个询问最多被删除一次,所以时间复杂度仍为$O(nlog_2n)$
#include<map>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define Mod 19921228
#define lll spc<<1
#define rrr spc<<1|1
typedef long long lnt;
struct data{
lnt add;
lnt first;
lnt mod;
lnt prod;
void Insert(void)
{
scanf("%lld%lld%lld%lld",&add,&first,&mod,&prod);
return ;
}
lnt sta(void)
{
return first%mod;
}
lnt S(lnt lst,lnt i)
{
return (prod*lst+add+i)%mod;
}
}P,C,L,R;
struct pnt{
int p;
int l,r;
int no;
int c;
void sta(void)
{
no=;
p=P.sta();
l=L.sta();
r=R.sta();
c=C.sta();
return ;
}
void ch(void)
{
if(l>r)std::swap(l,r);
return ;
}
}p[];
struct trnt{
int minval;
int to;
int h;
int lzt;
}tr[];
int cnt;
int tot;
lnt ans;
int n;
int a[];
std::map<int,int>M;
std::vector<int>v[];
bool cmp(pnt x,pnt y)
{
return x.c>y.c;
}
void pushup(int spc)
{
tr[spc].minval=std::min(tr[lll].minval,tr[rrr].minval);
return ;
}
void add(int spc,int v)
{
tr[spc].minval+=v;
tr[spc].lzt+=v;
return ;
}
void pushdown(int spc)
{
if(tr[spc].lzt)
{
add(lll,tr[spc].lzt);
add(rrr,tr[spc].lzt);
if(!tr[spc].to)tr[spc].lzt=;
}
return ;
}
void build(int l,int r,int spc)
{
if(l==r)
{
tr[spc].h=;
tr[spc].to=l;
if(v[l].size())tr[spc].minval=v[l][];
else tr[spc].minval=0x3f3f3f3f;
return ;
}
int mid=(l+r)>>;
build(l,mid,lll);
build(mid+,r,rrr);
pushup(spc);
return ;
}
void update(int l,int r,int ll,int rr,int spc)
{
if(l>rr||ll>r)return ;
if(ll<=l&&r<=rr)
{
add(spc,-);
return ;
}
pushdown(spc);
int mid=(l+r)>>;
update(l,mid,ll,rr,lll);
update(mid+,r,ll,rr,rrr);
pushup(spc);
return ;
}
void check(int spc,int V)
{
if(tr[spc].minval>)return ;
if(tr[spc].to)
{
ans=(ans+V)%Mod;
tr[spc].h++;
int i=tr[spc].to;
if(tr[spc].h>=v[i].size())tr[spc].minval=0x3f3f3f3f;
else{
tr[spc].minval=v[i][tr[spc].h]+tr[spc].lzt;
}
return ;
}
pushdown(spc);
check(lll,V);
check(rrr,V);
pushup(spc);
return ;
}
int main()
{
scanf("%d",&n);
P.Insert(),C.Insert(),L.Insert(),R.Insert();
p[].sta();
for(int i=;i<=n;i++)
{
p[i].no=i;
p[i].p=P.S(p[i-].p,i);
p[i].l=L.S(p[i-].l,i);
p[i].r=R.S(p[i-].r,i);
p[i].c=C.S(p[i-].c,i);
a[++cnt]=p[i].l;
a[++cnt]=p[i].r;
a[++cnt]=p[i].p;
}
a[++cnt]=p[].l;
a[++cnt]=p[].r;
a[++cnt]=p[].p;
std::sort(a+,a+cnt+);a[]=-;
for(int i=;i<=cnt;i++)
{
if(M.find(a[i])==M.end())M[a[i]]=++tot;
}
for(int i=;i<=n;i++)
{
p[i].l=M[p[i].l];
p[i].r=M[p[i].r];
p[i].p=M[p[i].p];
v[p[i].p].push_back(i);
}
for(int i=;i<=n;i++)p[i].ch();
build(,tot,);
std::sort(p+,p+n+,cmp);
for(int i=;i<=n;i++)
{
update(,tot,p[i].l,p[i].r,);
check(,p[i].c);
}
printf("%lld\n",(ans%Mod+Mod)%Mod);
return ;
}
BZOJ一句话的更多相关文章
- bzoj一句话题解
发现好多人都在搞这个...本人也想来试试(Solved刚到70就搞这个靠不靠谱啊喂).会更新的.嗯. 1000-1029 1000 A+B problem (这个还需要一句话吗?). 1001 狼抓兔 ...
- BZOJ 一句话题解
菜鸡刷题记录 [题号:题解] 1008:简单排列组合 #include <bits/stdc++.h> using namespace std; #define ll long long ...
- Bzoj 近期题目一句话题解
目录 Bzoj 近期题目题解 1000: A+B Problem (模拟) 1008: [HNOI2008]越狱 (容斥) 1012: [JSOI2008]最大数maxnumber (线段树) 103 ...
- BZOJ平推计划
学习VFK大神推BZOJ,记录一下学习的东西 1004: burnside:一个置换群的等价计数=(每个置换的置换后等价情况数)/置换总数,每个置换的置换后等价情况数就是置换后没变的数 模意义下的除法 ...
- [BZOJ - 2631] tree 【LCT】
题目链接:BZOJ - 2631 题目分析 LCT,像线段树区间乘,区间加那样打标记. 这道题我调了一下午. 提交之后TLE了,我一直以为是写错了导致了死循环. 于是一直在排查错误.直到.. 直到我看 ...
- BZOJ.4695.最假女选手(线段树 Segment tree Beats!)
题目链接 区间取\(\max,\ \min\)并维护区间和是普通线段树无法处理的. 对于操作二,维护区间最小值\(mn\).最小值个数\(t\).严格次小值\(se\). 当\(mn\geq x\)时 ...
- BZOJ.1036 [ZJOI2008]树的统计Count ( 点权树链剖分 线段树维护和与最值)
BZOJ.1036 [ZJOI2008]树的统计Count (树链剖分 线段树维护和与最值) 题意分析 (题目图片来自于 这里) 第一道树链剖分的题目,谈一下自己的理解. 树链剖分能解决的问题是,题目 ...
- bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)
听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...
- LOJ 一本通一句话题解系列:
第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...
随机推荐
- 精品JS代码收藏大全
1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键 <table border oncontextmenu ...
- 作为一个程序员怎么通过android开发赚钱
上面是一个程序员通过Android开发每天的收入,信则有! 自己学安卓差不多,有一年了.我本来是从事javaweb开发的,可能学习安卓上手会快点.其实安卓没有那难 .首先开发安卓程序,要有一个,开 ...
- HDOJ1084 What Is Your Grade?
What Is Your Grade? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- UE4 中的人工智能解析—ShooterGame为例
在UE4编辑器中,打开内容浏览器,右击鼠标,创建传说中的行为树: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQTM2MzA2MjM=/font/5a6L ...
- sass06 mixin
scss @mixin cont{ //mixin是关键字 color:red; } body{ @include cont; //使用默认值 } @mixin cont($color: red ){ ...
- [luoguP4302] [SCOI2003] 字符串折叠 解题报告(区间DP)
题目链接:https://www.luogu.org/problemnew/show/P4302 题解: 我们考虑折叠一个区间里的字符串,怎么样才是最优的 1.把这个区间分成几部分分别折叠 2.把这个 ...
- [转]60fps on the mobile web
Flipboard launched during the dawn of the smartphone and tablet as a mobile-first experience, allowi ...
- 基于Struts2+MySQL的多表出差明细表单
下载地址:http://download.csdn.net/detail/qq_33599520/9790629 项目结构: UserAction package com.mstf.action; i ...
- POJ 1144 Network【割顶】
学习的这一篇:https://www.byvoid.com/blog/biconnect 割顶:对于无向图G,如果删除某个点u后,连通分量数目增加,称u为图的关节点或者割顶 u为割顶的条件: (1)u ...
- GoldenGate 反向切换步骤
1 事先配置好反向复制链路: 2 停止源端的应用程序; 3 确认源端Capture已捕获所有的Redo信息: GGSCI>info all GGSCI>info ext_app 4 确认源 ...