[POJ1205]Water Treatment Plants
题目大意:
有一排n个格子,要在它们上面装管道。
每个格子上的管道都是T形的,但是可以有三种流动的方向。
每种都是把两个方向的水往另一个方向排出。
如果方向是向左或向右,就是排到相邻的格子里。
特别地,最左边的格子不能向左排水,最右边的格子不能向右排水。
现在每个格子都有一些积水等待排出,问能使所有格子的水最后都会从下面流出的方案数。
思路:
我们不妨用f[i][0~2]表示第i个格子排水方案数。
0~2表示不同的方向。
用0表示下,1表示左,2表示右。
f[i][0]=f[i-1][1]+f[i-1][2];
f[i][1]=f[i-1][0]+f[i-1][1]+f[i-1][2];
f[i][2]=f[i-1][0]+f[i-1][1]+f[i-1][2];
压到一维就是f[i]=f[i-1]*3-f[i-2]。
然后又变成了一道入门题。
然而题目并没有告诉你模数,所以需要高精度,总之就是特别恶心。
#include<cmath>
#include<cstdio>
#include<cstring>
class BigInteger {
private:
static const int base=1e8;
int len;
int num[];
public:
BigInteger() {
len=;
memset(num,,sizeof num);
}
BigInteger &operator = (const int &x) {
len=;
num[]=x;
return *this;
}
BigInteger &operator = (const BigInteger &x) {
len=x.len;
memcpy(num,x.num,sizeof num);
return *this;
}
BigInteger operator * (const int &x) const {
BigInteger ans;
for(register int i=;i<=len;i++) {
ans.num[i]+=num[i]*x;
ans.num[i+]=ans.num[i]/base;
ans.num[i]%=base;
}
ans.len=len;
if(ans.num[len+]) ans.len++;
return ans;
}
BigInteger operator - (const BigInteger &x) const {
BigInteger ans;
for(register int i=;i<=len;i++) {
ans.num[i]+=num[i]-x.num[i];
if(ans.num[i]<) {
ans.num[i]+=base;
ans.num[i+]--;
}
}
ans.len=len;
if(!ans.num[len]&&len) ans.len--;
return ans;
}
void println() {
printf("%d",num[len]);
for(register int i=len-;i>=;i--) {
if(!num[i]) {
printf("");
continue;
}
for(register int j=log10(num[i]);j<=;j++) {
putchar('');
}
printf("%d",num[i]);
}
putchar('\n');
}
};
BigInteger f[];
int main() {
int n;
while(~scanf("%d",&n)) {
f[]=;
f[]=;
for(register int i=;i<=n;i++) {
f[i%]=f[(i-)%]*-f[(i-)%];
}
f[n%].println();
}
return ;
}
[POJ1205]Water Treatment Plants的更多相关文章
- POJ 1205 Water Treatment Plants(递推)
题意 建设一条河岸的污水处理系统 河岸有n个城市 每一个城市都能够自己处理污水 V 也能够把污水传到相邻的城市处理 >或< 除了你传给我我也传给你这样的情况 其他都是 ...
- poj 1205 :Water Treatment Plants (DP+高精度)
题意:有n个城市,它们由一个污水处理系统连接着,每个城市可以选择 1.将左边城市过来的污水和右边城市过来的污水连同本身的污水排到河里 >V< 2.将左边来的污水连同自己的污水排到右边 ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- DP:0
小故事: A * "1+1+1+1+1+1+1+1 =?" * A : "上面等式的值是多少" B : *计算* "8!" A *在上面等式 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- 2018 青岛ICPC区域赛E ZOJ 4062 Plants vs. Zombie(二分答案)
Plants vs. Zombies Time Limit: 2 Seconds Memory Limit: 65536 KB BaoBao and DreamGrid are playin ...
- Plants vs. Zombies(二分好题+思维)
Plants vs. Zombies http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5819 BaoBao and DreamG ...
- zoj4062 Plants vs. Zombies 二分+模拟(贪心的思维)
题目传送门 题目大意:有n个植物排成一排,标号为1-n,每株植物有自己的生长速度ai,每对植物浇一次水,该株植物就长高ai,现在机器人从第0个格子出发,每次走一步,不能停留,每一步浇一次水,总共可以走 ...
- [zz]The Royal Treatment
http://www.cgw.com/Publications/CGW/2012/Volume-35-Issue-4-June-July-2012/The-Royal-Treatment.aspx T ...
随机推荐
- solr笔记之安装部署到tomcat
1. 下载 solr 去官网下载,下载的时候选清华的镜像源,这个页面:https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.1.0/ 在/ ...
- Django之动态验证码的生成
kind.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- php常用代码段
点击换验证码 <a href=" src="{:U('Reglog/vcode')}" /></a> TP上一条下一条 $prev=$artica ...
- java校验身份证号码
/** * 18位身份证校验,粗略的校验 * @author lyl * @param idCard * @return */ public static boolean is18ByteIdCard ...
- 71.Adam Taylor玩转MicroZed系列第82部分:简单通信接口第2部分
By Adam Taylor 从上周的博客开始,我们已经进入到Zedboard(而不是MicroZed)板上的OLED显示模块的编程了.然而在正式进入具体的OLED编程之前,我认为有必要验证我们是否已 ...
- malloc原理和内存碎片【转】
转自:http://www.cnblogs.com/zhaoyl/p/3820852.html 当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作: 1.检查要访问的虚拟地址是否合法 2.查 ...
- linux 实现自动创建ftp用户并创建文件夹
创建一个 createuser.sh的脚本文件 #!/bin/sh #传入的文件名 name=$1 #创建该用户所对应的ftp文件夹 /srv/ftp是我的ftp服务器的根目录 mkdir /sr ...
- Linux阵列 RAID详解 (转)
原文链接:http://molinux.blog.51cto.com/2536040/516008 一. RAID详解 二. mdadm工具介绍 三. 创建一个RAID的基本过程 四. ...
- navigator.geolocation详解
https://blog.csdn.net/qq_27626333/article/details/51815467 PositionOptions: JSON对象,监听设备位置信息参数 naviga ...
- Codeforces Round #423 Div. 2 C-String Reconstruction(思维)
题目大意:告诉你n个字符串以及这些字符串在字符串s中出现的位置(x1,x2.....xn),要求在满足上述条件的情况下,求出字典序最小的字符串s. 解题思路:主要问题是,如果直接模拟是会超时的,比如v ...