bzoj1000题解

Posted Special Containment Procedures

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1000题解相关的知识,希望对你有一定的参考价值。

    恩。。貌似还没有人写过这题的题解。。那我就来蛤基一波吧。

    作为bzoj上唯一对新人友好的题,1000的解法也是多种多样的,主要有以下解法:

1.模拟法

2.汇编法

3.网络流法

4.二进制法

。。。

    好,我们来分析一下各种解法的优劣性:

 

1.模拟法

    时间复杂度:O(1)

    空间复杂度:与语言有关

    这个没什么好说的,只要掌握基本的读入输出与+运算符就可以了。

Pascal:

1 var a,b:longint;
2 begin
3     read(a,b); writeln(a+b);
4 end.

C++:

1 #include <cstdio>
2 using namespace std;
3 int a,b;
4 int main()
5 {
6     return scanf("%d%d",&a,&b),printf("%d\n",a+b),0;
7 }

Python2:

1 print eval(raw_input().strip().replace( ,+))

 

2.汇编法

    时间复杂度:O(1)

    空间复杂度:O(1)

    额,其实内嵌汇编我也不太会,大家可以去尝试一下在g++后加参数-S输出C++的汇编代码,至于其他语言。。

 

3.网络流法

    时间复杂度:与建图有关,一般认为O(1)

    空间复杂度:与建图有关

    这里说一个最简单的建图:从S到T连两条边,容量分别为a和b的值,然后。。流流流!

 

4.二进制法

    时间复杂度:O(1)

    空间复杂度:O(1)

    我们可以证明a+b=(a|b)+(a&b):

        显然,对于a和b的任一二进制位ai,bi,ai+bi=(ai|bi)+(ai&bi),证明如下:

        ai=bi=0时,0+0=(0|0)+(0&0)=0

        ai=bi=1时,1+1=(1|1)+(1&1)=2

        ai^bi=0时,1+0=(1|0)+(1&1)=1

        于是,∑(ai+bi)*2i=a+b=(a|b)+(a&b)=∑((ai|bi)+(ai&bi))*2i(0<=i<log2(max(a,b)))

        证毕。

C++:

1 #include <cstdio>
2 using namespace std;
3 int a,b;
4 int main()
5 {
6     return scanf("%d%d",&a,&b),printf("%d\n",(a|b)+(a&b)),0;
7 }

 

【水完就跑,祝大家UTR能上rating哦~

以上是关于bzoj1000题解的主要内容,如果未能解决你的问题,请参考以下文章

题解 bzoj2748 [HAOI2012]音量调节 (动态规划)

BZOJ2339HNOI2011卡农

BZOJ1043:[HAOI2008]下落的圆盘——题解

[BZOJ 2257][JSOI2009]瓶子和燃料 题解(GCD)

bzoj1602[Usaco2008 Oct]牧场行走*

bzoj1603[Usaco2008 Oct]打谷机*