NYOJ - 143 第几是谁? & NYOJ - 149 我排第几个
来源:互联网 发布:人工智能玩游戏 编辑:程序博客网 时间:2024/04/27 20:37
1.题面
http://acm.nyist.net/JudgeOnline/problem.php?pid=143
http://acm.nyist.net/JudgeOnline/problem.php?pid=139
2.题意
两道题,一个是给你这个排列在所有排列中的排名,让你给出原来的序列,另一个是给出序列,让你求出原来的排名。
3.思路
需要使用康拓展开和康拓逆展开,核心代码如下
ll fact[size];int set_Fact(){fact[0] = fact[1] = 1;for (int i=2;fact[i-1]<1e10;i++)fact[i] = fact[i-1]*i;}ll cantor_exp(int *arr,int len){/*Rank counts from zero.*/int i,j,k;ll ret = 0;for (i=0;i<len;i++){k = 0;for (j=i+1;j<len;j++)if (arr[j]<arr[i])k++;ret += k*fact[len-i-1];}return ret;}void cantor_reexp(int * arr,int len,ll rank){/*The input rank should counts from zero.Then output rank counts from zero.*/int i,j,k;bool *vis = new bool[len];fill(vis,vis+len,false);for (i=0;i<len;i++){arr[i] = rank/fact[len-i-1];for (j=0;j<=arr[i];j++){if (vis[j]){arr[i]++;}}vis[arr[i]] = true;rank %= fact[len-i-1];}delete[] vis;}
4.代码
两道题的代码如下
int main(){std::ios::sync_with_stdio(false);cin.tie(0);int i,j;char str[size];int num[size];set_Fact();int T;cin >> T;while (T--){cin >> str;int len = strlen(str);for (i=0;i<len;i++){num[i] = str[i] - 'a' + 1;}cout << cantor_exp(num,len) << endl;}return 0;}
int main(){std::ios::sync_with_stdio(false);cin.tie(0);int i,j;char str[size];int num[size];set_Fact();int T;cin >> T;int len = 12;while (T--){ll n;cin >> n;cantor_reexp(num,len,--n);for (i=0;i<len;i++)cout << char(num[i]+'a');cout << endl;}return 0;}
0 0
- NYOJ - 143 第几是谁? & NYOJ - 149 我排第几个
- nyoj 143第几是谁?和 nyoj 139 我排第几个
- nyoj 139 我排第几 143 第几是谁
- NYOJ - 我排第几个
- NYOJ 139 我排第几个 和 NYOJ 143 第几是谁? 【康拓展开和逆康拓展开】
- nyoj-143-第几是谁
- nyoj 143 第几是谁?
- NYOJ 143 第几是谁?
- nyoj 143 第几是谁?
- NYOJ 139 我排第几个
- NYOJ-139:我排第几个
- NYOJ 我排第几个 南工139
- NYOJ 139 我排第几个
- NYOJ,139,我排第几个
- nyoj 139 我排第几个
- NYOJ 139 我排第几个?
- nyoj-139 我排第几个
- NYOJ 139 我排第几个
- 动画
- scoped_array
- Ajax
- 《剑指offer》把字符串转换成整数
- 高性能的通讯库-zeroMQ的几个高性能特征
- NYOJ - 143 第几是谁? & NYOJ - 149 我排第几个
- Web本地存储 - localStorage
- LeetCode|Kth Largest Element in an Array
- iOS AFNetworking使用技巧与问题
- LayoutInflater
- Haar特征的另一种的快速计算方法—boxfilter
- [leetcode] 227. Basic Calculator II 解题报告
- iOS知识点之一代理、通知、block
- matlab .m文件的编写&使用