【noi 2.6_9290】&【poj 2680】Computer Transformation(DP+高精度+重载运算符)
题意:给一个初始值1,每步操作将1替换为01,将0替换为10。问N步操作后有多少对连续的0。
解法:f[i]表示第i步后的答案。可以直接打表发现规律——奇数步后,f[i]=f[i-1]*2-1;偶数步后,f[i]=f[i-1]*2+1;
至于原因——我只能简单说一点。第i步后的答案可由i-1步后的“01”+“1”+“0”的个数推出,而“01”*2+“1”+“0”=01串的总个数。用x表示i-1步后的“01”的个数,则f[i]=x+(2^(i-1)-x*2);但这样复杂度挺高,我也不知道怎么优化了。
noi oj上的实际数据没有1000这么大,在65以内,用long long也可以过。
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6 #define N 1010
7
8 int n;
9 long long f[N];
10
11 int main()
12 {
13 f[1]=0;
14 for (int i=2;i<=N;i++)
15 {
16 if (i%2) f[i]=f[i-1]*2-1;
17 else f[i]=f[i-1]*2+1;
18 }
19 while(~scanf("%d",&n)) printf("%lld\n",f[n]);
20 return 0;
21 }
无高精度
我高精度的不知为何在noi oj上AC,在poj上WA。若有大牛能纠正我,请多多指教~
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6 #define N 1000
7
8 struct node
9 {
10 int s[210];
11 int l;
12 node() {l=0;memset(s,0,sizeof(s));}
13 };
14 node f[N+10];
15
16 node operator*(node x,int y)//不可省掉构成运算符左右的整型
17 {
18 node z;
19 z.l=x.l;
20 for (int i=1;i<=z.l;i++)
21 {
22 z.s[i]+=x.s[i]*2;
23 if (z.s[i]>9) z.s[i+1]+=z.s[i]/10,z.s[i]%=10;
24 }
25 while (z.s[z.l+1]) z.l++;
26 return z;
27 }
28 node operator-(node x,int y)
29 {
30 node z=x;
31 int t=1;
32 z.s[t]--;
33 while (z.s[t]<0) z.s[t]+=10,z.s[++t]--;
34 while (!z.s[z.l]) z.l--;
35 return z;
36 }
37 node operator+(node x,int y)
38 {
39 node z=x;
40 int t=1;
41 z.s[t]++;
42 while (z.s[t]>9) z.s[t+1]+=z.s[t]/10,z.s[t++]%=10;
43 while (z.s[z.l+1]) z.l++;
44 return z;
45 }
46 void print(node x)
47 {
48 for (int i=x.l;i>=1;i--)
49 printf("%d",x.s[i]);
50 printf("\n");
51 }
52 int main()
53 {
54 freopen("a.in","r",stdin);
55 freopen("a.out","w",stdout);
56 f[1].l=1,f[1].s[1]=0;
57 for (int i=2;i<=N;i++)
58 {
59 if (i%2) f[i]=f[i-1]*2-1;
60 else f[i]=f[i-1]*2+1;
61 }
62 int n;
63 while(~scanf("%d",&n)) print(f[n]);
64 return 0;
65 }
高精度+重载运算符
P.S.重载运算符 不可省掉构成运算符左右的2个类型,例如:整型。
【noi 2.6_9290】&【poj 2680】Computer Transformation(DP+高精度+重载运算符)的更多相关文章
- 【noi 2.6_9280】&【bzoj 1089】严格n元树(DP+高精度+重载运算符)
题意:定义一棵树的所有非叶节点都恰好有n个儿子为严格n元树.问深度为d的严格n元树数目. 解法:f[i]表示深度为<=i的严格n元树数目.f[i]-f[i-1]表示深度为i的严格n元树数目.f[ ...
- HOJ 2148&POJ 2680(DP递推,加大数运算)
Computer Transformation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4561 Accepted: 17 ...
- Computer Transformation(规律,大数打表)
Computer Transformation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- HDU 1041 Computer Transformation (简单大数)
Computer Transformation http://acm.hdu.edu.cn/showproblem.php?pid=1041 Problem Description A sequenc ...
- hdu_1041(Computer Transformation) 大数加法模板+找规律
Computer Transformation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- (大数)Computer Transformation hdu1041
Computer Transformation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- POJ.3624 Charm Bracelet(DP 01背包)
POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...
- Computer Transformation(简单数学题+大数)
H - Computer Transformation Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &am ...
- POJ 2995 Brackets 区间DP
POJ 2995 Brackets 区间DP 题意 大意:给你一个字符串,询问这个字符串满足要求的有多少,()和[]都是一个匹配.需要注意的是这里的匹配规则. 解题思路 区间DP,开始自己没想到是区间 ...
随机推荐
- Linux tar压缩和解压
经常会忘记 tar 压缩和解压命令的使用,故记下来. 1. 打包压缩 tar -zcvf pack.tar.gz pack/ #打包压缩为一个.gz格式的压缩包 tar -jcvf pack.tar. ...
- 【Linux】linux中用vim来比较文件内容不同
1. 使用vim的比较模式打开两个文件: vim -d file1 file2 或 vimdiff file1 file2 2. 如果已经打开了文件file1,再打开另一个文件file2进行比较: : ...
- ASP.NET Core错误处理中间件[4]: 响应状态码页面
StatusCodePagesMiddleware中间件与ExceptionHandlerMiddleware中间件类似,它们都是在后续请求处理过程中"出错"的情况下利用一个错误处 ...
- Java自学笔记之学生管理系统
实现:学生管理系统,实现学生信息的添加.修改.查询和删除功能 涉及:集合的基础知识(集合遍历,值得获取与替换,set/get方法) 代码如下: Student文件 1 package Demo_120 ...
- 响应式编程库RxJava初探
引子 在读 Hystrix 源码时,发现一些奇特的写法.稍作搜索,知道使用了最新流行的响应式编程库RxJava.那么响应式编程究竟是怎样的呢? 本文对响应式编程及 RxJava 库作一个初步的探索. ...
- flask文件下载
后端的代码 # coding:utf-8 from flask import Flask app = Flask(__name__) @app.route("/upload", m ...
- 简单的DbContext工厂类(EFCore)
前言 根据appsettings.json的中配置的数据库类型,使用工厂模式创建DbContext 代码实现 appsettings.json中的配置项 //使用的数据库类型 "Server ...
- Jmeter接口自动化测试系列之函数使用及扩展
介绍一下Jmeter自带函数的使用和 函数扩展,来满足测试工作中的各种需求! Jmeter自带函数 点击函数帮助助手图标,弹出函数助手框,可以选择各种各样的函数 举例: _Random 获取随机数,可 ...
- 【python刷题】LRU
什么是LRU? LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次 ...
- testng学习笔记-- beforesuit和aftersuit
一.定义 测试套件,主要关注执行顺序 套件:suit可以包含多个class 二.代码标签 三.运行结果