一句话题解集合。

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一句话的更多相关文章

  1. bzoj一句话题解

    发现好多人都在搞这个...本人也想来试试(Solved刚到70就搞这个靠不靠谱啊喂).会更新的.嗯. 1000-1029 1000 A+B problem (这个还需要一句话吗?). 1001 狼抓兔 ...

  2. BZOJ 一句话题解

    菜鸡刷题记录 [题号:题解] 1008:简单排列组合 #include <bits/stdc++.h> using namespace std; #define ll long long ...

  3. Bzoj 近期题目一句话题解

    目录 Bzoj 近期题目题解 1000: A+B Problem (模拟) 1008: [HNOI2008]越狱 (容斥) 1012: [JSOI2008]最大数maxnumber (线段树) 103 ...

  4. BZOJ平推计划

    学习VFK大神推BZOJ,记录一下学习的东西 1004: burnside:一个置换群的等价计数=(每个置换的置换后等价情况数)/置换总数,每个置换的置换后等价情况数就是置换后没变的数 模意义下的除法 ...

  5. [BZOJ - 2631] tree 【LCT】

    题目链接:BZOJ - 2631 题目分析 LCT,像线段树区间乘,区间加那样打标记. 这道题我调了一下午. 提交之后TLE了,我一直以为是写错了导致了死循环. 于是一直在排查错误.直到.. 直到我看 ...

  6. BZOJ.4695.最假女选手(线段树 Segment tree Beats!)

    题目链接 区间取\(\max,\ \min\)并维护区间和是普通线段树无法处理的. 对于操作二,维护区间最小值\(mn\).最小值个数\(t\).严格次小值\(se\). 当\(mn\geq x\)时 ...

  7. BZOJ.1036 [ZJOI2008]树的统计Count ( 点权树链剖分 线段树维护和与最值)

    BZOJ.1036 [ZJOI2008]树的统计Count (树链剖分 线段树维护和与最值) 题意分析 (题目图片来自于 这里) 第一道树链剖分的题目,谈一下自己的理解. 树链剖分能解决的问题是,题目 ...

  8. bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)

    听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...

  9. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

随机推荐

  1. Hdu4786

    Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  2. 错误处理:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter

    部署项目时,启动Tomcat一直出错:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter SEVE ...

  3. Making User-Managed Backups-17.4、Making User-Managed Backups of Online Tablespaces and Datafiles

    17.4.Making User-Managed Backups of Online Tablespaces and Datafiles 当数据库打开时,能够备份一个在线表空间全部和一个指定的数据文件 ...

  4. 互不侵犯_状压$dp$

    如果有想学习状压\(dp\)的童鞋,请光临博客状压\(dp\)初学 互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八 ...

  5. iOS菜鸟成长笔记(3)——斯坦福公开课学习(1)

    一.iOS四层结构 1.Core OS 是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSIX标准的一个Unix核心.这一层包含或者说是提供了整个iPhone OS的一些基础功能, ...

  6. FragmentPagerAdapter和FragmentStatePagerAdapter的区别

    FragmentPagerAdapter 1:简单的介绍: 该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种:如果需要处理有很多页,并且数据动 ...

  7. bzoj2124 等差子序列(树状数组+hash)

    题意 给你一个1~n排列,问有没有一个等差数列(长度至少为3) 题解 我居然自己想到了正解. 但我最后写挂了,所以我又看了题解. 我们维护了一个以权值为下标的01序列. 我们扫描整个序列.对于每一个正 ...

  8. Rman备份及不完全恢复操作

    最后更新时间:2018/12/18 启用归档 --检查是否为归档 SQL> archive log list; Database log mode              No Archive ...

  9. [转载]-分布式之redis复习精讲

    原创地址:https://www.cnblogs.com/rjzheng/p/9096228.html 看这篇文章前,我看的是另一个人博客上的文章.看到最后(评论这一块)很多人就指出这并非原创而是抄袭 ...

  10. whatis---查询一个命令执行什么功能

    whatis命令是用于查询一个命令执行什么功能,并将查询结果打印到终端上. whatis命令在用catman -w命令创建的数据库中查找command参数指定的命令.系统调用.库函数或特殊文件名.wh ...