洛谷 P1001 A+B Problem
题目描述
输入两个整数a,b,输出它们的和(|a|,|b|<=10^9)。 注意 1、pascal使用integer会爆掉哦!
2、有负数哦!
3、c/c++的main函数必须是int类型,而且最后要return 0。这不仅对洛谷其他题目有效,而且也是noip/noi比赛的要求!
好吧,同志们,我们就从这一题开始,向着大牛的路进发。
“任何一个伟大的思想,都有一个微不足道的开始。”
输入输出格式
输入格式:
两个整数以空格分开
输出格式:
一个数
输入输出样例
20 30
50
#include <algorithm>
#include <cstdio>
#include <vector>
#include <queue> using namespace std;
int a,b;
long long ans;
class Segmenttree
{
private:
int dis[];
struct Segment
{
int l,r,sum;
Segment *ch[];
Segment()
{
ch[]=ch[]=NULL;
}
};
void build(Segment *&k,int l,int r)
{
k=new Segment;
k->l=l;k->r=r;
if(l==r) {k->sum=dis[l];return;}
int mid=(l+r)>>;
build(k->ch[],l,mid);
build(k->ch[],mid+,r);
k->sum=k->ch[]->sum+k->ch[]->sum;
}
int Tree_Query(Segment *&k,int l,int r)
{
if(k->l==l&&k->r==r) return k->sum;
int mid=(k->l+k->r)>>;
if(l>mid) return Tree_Query(k->ch[],l,r);
else if(r<=mid) return Tree_Query(k->ch[],l,r);
else return Tree_Query(k->ch[],l,mid)+Tree_Query(k->ch[],mid+,r);
}
public:
int get()
{
Segment *root=new Segment;
dis[]=a;
dis[]=b;
build(root,,);
return Tree_Query(root,,);
}
};
class Segmenttree segment;
class chairmantree
{
private:
int rs[],ls[],sum[],rt[],v1[],v2[],tot,Size;
int build(int l,int r)
{
int now=++tot;
sum[now]=;
if(l==r) return now;
int mid=(l+r)>>;
ls[now]=build(l,mid);
rs[now]=build(mid+,r);
return now;
}
inline int rank(int x) {return lower_bound(v2+,v2++Size,x)-v2;}
void update(int l,int r,int x,int &y,int t)
{
y=++tot;
sum[y]=sum[x]+;
if(l==r) return;
ls[y]=ls[x];
rs[y]=rs[x];
int mid=(l+r)>>;
if(t<=mid) update(l,mid,ls[x],ls[y],t);
else update(mid+,r,rs[x],rs[y],t);
}
int ask(int l,int r,int x,int y,int k)
{
if(l==r) return l;
int mid=(l+r)>>;
if(sum[ls[y]]-sum[ls[x]]>=k) return ask(l,mid,ls[x],ls[y],k);
else {k-=sum[ls[y]]-sum[ls[x]];return ask(mid+,r,rs[x],rs[y],k);}
}
public:
int get()
{
v1[]=v2[]=a;
v1[]=v2[]=b;
sort(v2+,v2++);
Size=unique(v2+,v2++)-v2-;
rt[]=build(,Size);
for(int i=;i<=;++i) update(,Size,rt[i-],rt[i],rank(v1[i]));
return v2[ask(,Size,rt[],rt[],)]+v2[ask(,Size,rt[],rt[],)];
}
};
class chairmantree chairman;
class BIT
{
private:
int tag[],n;
inline int lowbit(int x) {return x&(-x);}
void modify(int x,int y)
{
for(;x<=n;x+=lowbit(x))
tag[x]+=y;
}
int ask(int x)
{
int ret=;
for(;x;x-=lowbit(x)) ret+=tag[x];
return ret;
}
public:
int get()
{
n=;
tag[]=tag[]=;
modify(,a);
modify(,b);
return ask()-ask();
}
};
class BIT bit;
class SPFA
{
private:
vector<pair<int,int> >G[];
int dis[],n;
bool vis[];
void Spfa(int s)
{
queue<int>q;
for(int i=;i<=n;++i) vis[i]=,dis[i]=0x7fffffff;
dis[s]=;
q.push(s);
for(int now;!q.empty();)
{
now=q.front();
q.pop();
vis[now]=;
for(int i=;i<G[now].size();++i)
{
int v=G[now][i].first,w=G[now][i].second;
if(dis[v]>dis[now]+w)
{
dis[v]=dis[now]+w;;
if(!vis[v])
{
vis[v]=;
q.push(v);
}
}
}
}
}
public:
int get()
{
n=;
G[].push_back(make_pair(,a));
G[].push_back(make_pair(,b));
Spfa();
return dis[];
}
};
class SPFA spfa;
class FLOYD
{
private:
#define inf 0x3f3f3f3f
inline int min(int a,int b) {return a>b?b:a;}
int f[][],n;
int floyd()
{
for(int k=;k<=n;++k)
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
return f[][];
}
public:
int get()
{
n=;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
f[i][j]=(i!=j)*inf;
f[][]=a;
f[][]=b;
return floyd();
}
};
class FLOYD floyd;
class DINIC
{
private:
inline int min(int a,int b) {return a>b?b:a;}
#define inf 0x3f3f3f3f
int s,t,nextt[],to[],flow[],head[],cnt,dep[];
bool bfs(int s,int t)
{
queue<int>q;
for(int i=s;i<=t;++i) dep[i]=-;
q.push(s);
dep[s]=;
for(int now;!q.empty();)
{
now=q.front();
q.pop();
for(int i=head[now];i;i=nextt[i])
{
int v=to[i];
if(dep[v]==-&&flow[i])
{
dep[v]=dep[now]+;
if(v==t) return true;
q.push(v);
}
}
}
return false;
}
int dfs(int now,int t,int Limit)
{
if(now==t||!Limit) return Limit;
int f,ret=;
for(int i=head[now];i;i=nextt[i])
{
int v=to[i];
if(dep[v]==dep[now]+&&flow[i]&&(f=dfs(v,t,min(Limit,flow[i]))))
{
flow[i]-=f;
flow[i^]+=f;
Limit-=f;
ret+=f;
if(!Limit) break;
}
}
if(ret!=Limit) dep[now]=-;
return ret;
}
int dinic(int s,int t)
{
int ret=;
for(;bfs(s,t);ret+=dfs(s,t,inf));
return ret;
}
void ins(int u,int v,int l)
{
nextt[++cnt]=head[u];
to[cnt]=v;
flow[cnt]=l;
head[u]=cnt;
}
public:
int get()
{
s=;t=;cnt=;
ins(s,,a);
ins(,s,);
ins(s,,b);
ins(,s,);
ins(,t,a);
ins(t,,);
ins(,t,b);
ins(t,,);
return dinic(s,t);
}
};
class DINIC dinic;
class DP
{
private:
inline int max(int a,int b) {return a>b?a:b;}
int f[],v[],w[];
public:
int get()
{
v[]=v[]=;
w[]=a;if(a<) f[]+=a,f[]+=a,f[]+=a;
w[]=b;if(b<) f[]+=b,f[]+=b,f[]+=b;
for(int i=;i<=;++i)
for(int j=;j>=v[i];--j)
f[j]=max(f[j-v[i]]+w[i],f[j]);
return f[];
}
};
class DP dp;
class Kruskal
{
private:
int fa[];
struct node
{
int x,y,z;
bool operator<(node a)const
{
return z<a.z;
}
}e[];
int find_(int x) {return x==fa[x]?x:fa[x]=find_(fa[x]);}
public:
int get()
{
int n=,cnt=;
for(int i=;i<=n;++i) fa[i]=i;
e[++cnt].x=;
e[cnt].y=;
e[cnt].z=a;
e[++cnt].x=;
e[cnt].y=;
e[cnt].z=b;
sort(e+,e++cnt);
int num=,ret=;
for(int i=;i<=cnt;++i)
{
int fx=find_(e[i].x),fy=find_(e[i].y);
if(fx!=fy)
{
fa[fy]=fx;
num++;
ret+=e[i].z;
if(num==n-) break;
}
}
return ret;
}
};
class Kruskal kruskal;
int Main()
{
scanf("%d%d",&a,&b);
ans+=segment.get();
ans+=bit.get();
ans+=chairman.get();
ans+=spfa.get();
ans+=floyd.get();
ans+=dinic.get();
ans+=dp.get();
ans+=kruskal.get();
printf("%lld\n",ans/);
return ;
}
int sb=Main();
int main(int argc,char *argv[]){;}
洛谷 P1001 A+B Problem的更多相关文章
- 【题解】洛谷P1001 A+B Problem
第一篇博客,献给2020年的残夏. 静听8月的热情与安宁,在竞赛中的时光如白驹过隙. 也不惧未知的风雨,努力向着既往的通途. 题目地址 https://www.luogu.com.cn/problem ...
- 洛谷P1001 A+B Problem
这道题…………还是很简单!!! code: #include <iostream> #include <cstdio> using namespace std; int mai ...
- 洛谷1001 A+B Problem
洛谷1001 A+B Problem 本题地址:http://www.luogu.org/problem/show?pid=1001 题目描述 输入两个整数a,b,输出它们的和(|a|,|b|< ...
- 洛谷1303 A*B Problem 解题报告
洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...
- 洛谷1601 A+B Problem(高精) 解题报告
洛谷1601 A+B Problem(高精) 本题地址:http://www.luogu.org/problem/show?pid=1601 题目背景 无 题目描述 高精度加法,x相当于a+b pro ...
- 洛谷P1865 A % B Problem
1.洛谷P1865 A % B Problem 题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行 ...
- 洛谷P1919 A*B problem 快速傅里叶变换模板 [FFT]
题目传送门 A*B problem 题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数 ...
- 【洛谷P1601 A+B Problem(高精)】
题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式: 分两行输入a,b<=10^500 ...
- 洛谷——P1480 A/B Problem
P1480 A/B Problem 题目描述 输入两个整数a,b,输出它们的商(a<=10^5000,b<=10^9) 输入输出格式 输入格式: 两行,第一行是被除数,第二行是除数. 输出 ...
随机推荐
- SQL Server中的聚集索引(clustered index) 和 非聚集索引 (non-clustered index)
本文转载自 http://blog.csdn.net/ak913/article/details/8026743 面试时经常问到的问题: 1. 什么是聚合索引(clustered index) / ...
- Open-source Tutorial - Json.NET
JSON 简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种由道格拉斯·克罗克福特构想和设计.轻量级的数据交换语言,该语言以易于让人阅读的文字 ...
- 使用CTE生成辅助表(数字或时间)等
数字辅助表: , ;WITH Digital_Rangs(Digital) AS ( SELECT @start_digital UNION ALL FROM [Digital_Rangs] WHER ...
- es6 reduce的用法
一.forEach回调函数参数,item(数组元素).index(序列).arr(数组本身)循环数组,无返回值,不改变原数组不支持return操作输出,return只用于控制循环是否跳出当前循环 二. ...
- 洛谷 P1875 佳佳的魔法药水
P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 --怎么样才能 ...
- ios 类似淘宝评论星星功能
创建星星视图: //星星 _myview = [[UIView alloc]initWithFrame:CGRectMake(95, 5, 200, 50)]; UIPanGestureRecogni ...
- 这几道Python面试题,稳准狠,Python面试题No15
必须放一个表情包,太魔性了! 第1题: 修改以下Python代码,使得下面的代码调用类A的show方法? 原始代码 class A(object): def run(self): print(&quo ...
- 条件分页 分页条件和页参数传递方式一 超链接拼串 方式二 使用查询表单searchForm
<%-- Created by IntelliJ IDEA. User: jie Date: 2019/5/10 Time: 20:00 To change this template use ...
- JS高级学习历程-10
[面向对象] 面向对象的三大特性:封装.继承.多态 封装:在“类”里边有关键字public.protected.private 对成员进行声明,这样每个成员的访问都会受到不同关键字的限制. 继承:在p ...
- CC11:链表分割
题目 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针.注意:分割以后保持 ...