codeforces Gym 100338H High Speed Trains (递推,高精度)
递推就好了,用二项式定理算出所有连边的方案数,减去不合法的方案,
每次选出一个孤立点,那么对应方案数就是上次的答案。
枚举选几个孤立点和选哪些,选到n-1个点的时候相当于都不选,只减1。
要用到高精度,直接开100*100的组合数数组会MLE,用滚动数组优化一下就好了。
不会java,python太伤了
- #include<bits/stdc++.h>
- using namespace std;
- const int MAXN = ;
- struct bign
- {
- int len, s[MAXN];
- bign ()
- {
- memset(s, , sizeof(s));
- len = ;
- }
- bign (int num) { *this = num; }
- bign (const char *num) { *this = num; }
- bign operator = (const int num)
- {
- char s[MAXN];
- sprintf(s, "%d", num);
- *this = s;
- return *this;
- }
- bign operator = (const char *num)
- {
- for(int i = ; num[i] == ''; num++) ;
- len = strlen(num);
- for(int i = ; i < len; i++) s[i] = num[len-i-] - '';
- return *this;
- }
- bign operator + (const bign &b) const
- {
- bign c;
- c.len = ;
- for(int i = , g = ; g || i < max(len, b.len); i++)
- {
- int x = g;
- if(i < len) x += s[i];
- if(i < b.len) x += b.s[i];
- c.s[c.len++] = x % ;
- g = x / ;
- }
- return c;
- }
- bign operator += (const bign &b)
- {
- *this = *this + b;
- return *this;
- }
- void clean()
- {
- while(len > && !s[len-]) len--;
- }
- bign operator * (const bign &b)
- {
- bign c;
- c.len = len + b.len;
- for(int i = ; i < len; i++)
- {
- for(int j = ; j < b.len; j++)
- {
- c.s[i+j] += s[i] * b.s[j];
- }
- }
- for(int i = ; i < c.len; i++)
- {
- c.s[i+] += c.s[i]/;
- c.s[i] %= ;
- }
- c.clean();
- return c;
- }
- bign operator *= (const bign &b)
- {
- *this = *this * b;
- return *this;
- }
- bign operator - (const bign &b)
- {
- bign c;
- c.len = ;
- for(int i = , g = ; i < len; i++)
- {
- int x = s[i] - g;
- if(i < b.len) x -= b.s[i];
- if(x >= ) g = ;
- else
- {
- g = ;
- x += ;
- }
- c.s[c.len++] = x;
- }
- c.clean();
- return c;
- }
- bign operator -= (const bign &b)
- {
- *this = *this - b;
- return *this;
- }
- bign operator / (const bign &b)
- {
- bign c, f = ;
- for(int i = len-; i >= ; i--)
- {
- f = f*;
- f.s[] = s[i];
- while(f >= b)
- {
- f -= b;
- c.s[i]++;
- }
- }
- c.len = len;
- c.clean();
- return c;
- }
- bign operator /= (const bign &b)
- {
- *this = *this / b;
- return *this;
- }
- bign operator % (const bign &b)
- {
- bign r = *this / b;
- r = *this - r*b;
- return r;
- }
- bign operator %= (const bign &b)
- {
- *this = *this % b;
- return *this;
- }
- bool operator < (const bign &b)
- {
- if(len != b.len) return len < b.len;
- for(int i = len-; i >= ; i--)
- {
- if(s[i] != b.s[i]) return s[i] < b.s[i];
- }
- return false;
- }
- bool operator > (const bign &b)
- {
- if(len != b.len) return len > b.len;
- for(int i = len-; i >= ; i--)
- {
- if(s[i] != b.s[i]) return s[i] > b.s[i];
- }
- return false;
- }
- bool operator == (const bign &b)
- {
- return !(*this > b) && !(*this < b);
- }
- bool operator != (const bign &b)
- {
- return !(*this == b);
- }
- bool operator <= (const bign &b)
- {
- return *this < b || *this == b;
- }
- bool operator >= (const bign &b)
- {
- return *this > b || *this == b;
- }
- string str() const
- {
- string res = "";
- for(int i = ; i < len; i++) res = char(s[i]+'') + res;
- return res;
- }
- };
- istream& operator >> (istream &in, bign &x)
- {
- string s;
- in >> s;
- x = s.c_str();
- return in;
- }
- ostream& operator << (ostream &out, const bign &x)
- {
- out << x.str();
- return out;
- }
- bign fpow(bign a,int b)
- {
- bign ret = ;
- while(b){
- if(b&) ret *= a;
- a *= a;
- b >>= ;
- }
- return ret;
- }
- const int maxn = ;
- bign tab[maxn];
- //typedef long long ll;
- bign C[][maxn];
- int main()
- {
- freopen("trains.in","r",stdin);
- freopen("trains.out","w",stdout);
- tab[] = ;
- int n;
- scanf("%d",&n);
- C[&][] = C[&][] = ;
- for(int i = ; i <= n; i++){
- bign Full = fpow(,i*(i-)/);
- int pre = i&,cur = pre^;
- C[cur][] = ;
- for(int j = ; j <= i; j++) C[cur][j] = C[pre][j-] + C[pre][j];
- for(int j = ; j < i; j++){
- Full -= tab[j]*C[cur][j];
- }
- tab[i] = Full - ;
- }
- cout<<tab[n]<<endl;
- return ;
- }
codeforces Gym 100338H High Speed Trains (递推,高精度)的更多相关文章
- Codeforces Gym 100338H High Speed Trains 组合数学+dp+高精度
原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-an ...
- PKU 2506 Tiling(递推+高精度||string应用)
题目大意:原题链接有2×1和2×2两种规格的地板,现要拼2×n的形状,共有多少种情况,首先要做这道题目要先对递推有一定的了解.解题思路:1.假设我们已经铺好了2×(n-1)的情形,则要铺到2×n则只能 ...
- 递推+高精度+找规律 UVA 10254 The Priest Mathematician
题目传送门 /* 题意:汉诺塔问题变形,多了第四个盘子可以放前k个塔,然后n-k个是经典的汉诺塔问题,问最少操作次数 递推+高精度+找规律:f[k]表示前k放在第四个盘子,g[n-k]表示经典三个盘子 ...
- [luogu]P1066 2^k进制数[数学][递推][高精度]
[luogu]P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻 ...
- CodeForces 429 B Working out(递推dp)
题目连接:B. Working out 我想了很久都没有想到怎么递推,看了题解后试着自己写,结果第二组数据就 wa 了,后来才知道自己没有判选择的两条路径是否只是一个交点. 大概思路是:先预处理出每个 ...
- Codeforces Round #271 (Div. 2)D(递推,前缀和)
很简单的递推题.d[n]=d[n-1]+d[n-k] 注意每次输入a和b时,如果每次都累加,就做了很多重复性工作,会超时. 所以用预处理前缀和来解决重复累加问题. 最后一个细节坑了我多次: print ...
- [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1089 分析: 第一感觉可以用一个通式求出来,但是考虑一下很麻烦,不好搞的.很容易发现最 ...
- 【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)
http://www.lydsy.com/JudgeOnline/problem.php?id=1089 题意:求深度为d的n元树数目.(0<n<=32, 0<=d<=16) ...
- 【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
1002: [FJOI2007]轮状病毒 Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同 ...
随机推荐
- 1.11-1.12 Sqoop导入数据时两种增量方式导入及direct
一.增量数据的导入 1.两种方式 ## query 有一个唯一标识符,通常这个表都有一个字段,类似于插入时间createtime where createtime => 201509240000 ...
- Validtion
今天在使用Validation框架实现验证时,出现以上的错误.查询资料后发现“validation-config.dtd”这个文件没有导入自己的工程,才会出现这样的错误. 将从文件导入后果然解决了问题 ...
- u3d shader学习笔记1
促使我学习SHADER的重要原因是希望深入理解3D渲染的机制,在此基础上可以灵活达到某种效果与性能的平衡,开发出具有良好体验的VR应用. 因为VR应用体验的好坏,直接由游戏的帧率决定,而游戏的帧率则受 ...
- sfc命令
开始—>运行—>再输入“sfc /scannow”(不含引号),“sfc”是“系统文件检测”程序,它是一个在命令提示符下使用的实用程序,只有是管理员才能使用该程序,这个程序的作用就是检测系 ...
- 安装APK时SO库的选择策略
此文已由作者尹彬彬授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 0X0 前言 在Android系统中,当我们安装apk文件的时候,lib目录下的so文件会被解压到app的原 ...
- IOS Carthage安装、使用
一.Carthage的安装和使用1.安装homebrew后输入如下命令 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercont ...
- P5135 painting(组合数)
传送门 如果\(op==1\),那么每一个方案都可以看做从\(n\)个数里选出\(m\)个数,然后\(sort\)一下依次放到每列,方案数就是\({n\choose m}\).因为\(n\)很大,但是 ...
- [Xcode 实际操作]一、博主领进门-(2)第一个工程项目:将导入的图片显示到屏幕上
目录:[Swift]Xcode实际操作 本文将演示创建第一个工程项目. 在项目导航区,鼠标右键[Assets.xcassets]资源文件夹. 隔壁右侧区域左下角点击[+],打开资源文件管理菜单-> ...
- pytest入门学习(2)
pytest的hello world pyt1.py def func(x): print (x+1); return x+1; def test_answer(): assert func(3) = ...
- C#求圆的周长、面积、体积
窗体应用程序 private void button1_Click(object sender, EventArgs e) { double r; r = Convert.ToInt32(textBo ...