博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM模板——康托展开
阅读量:5231 次
发布时间:2019-06-14

本文共 1534 字,大约阅读时间需要 5 分钟。

1 #include
2 #include
3 #include
4 #define _for(i,a,b) for(int i = (a);i < b;i ++) 5 typedef long long ll; 6 using namespace std; 7 ll a[10003]; 8 ll rnt[10003]; 9 int vis[10003];10 int m,n;11 inline ll read()12 {13 ll ans = 0;14 char ch = getchar(), last = ' ';15 while(!isdigit(ch)) last = ch, ch = getchar();16 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();17 if(last == '-') ans = -ans;18 return ans;19 }20 inline void write(ll x)21 {22 if(x < 0) x = -x, putchar('-');23 if(x >= 10) write(x / 10);24 putchar(x % 10 + '0');25 }26 int main()27 {28 n = read(),m = read();29 ll res = 0;30 _for(i,0,n)31 a[i] = read();32 33 _for(i,0,n)34 {35 ll tsum = 0;36 _for(j,0,i+1)37 if(a[j] <= a[i])38 tsum ++;39 rnt[i] = a[i]-tsum;40 }41 rnt[n-1] += m;42 for(int i = n-1;i > 0;i--)43 {44 rnt[i-1] += rnt[i]/(n-i);45 rnt[i] %= n-i;46 }47 48 memset(vis,0,sizeof(vis));49 _for(i,0,n)50 {51 rnt[i] ++;52 int j;53 for(j = 1;j <= n;j ++)54 {55 if(vis[j])56 continue;57 rnt[i] --;58 if(!rnt[i]) 59 break;60 }61 vis[j] = 1;62 printf("%d ",j);63 }64 return 0;65 }

洛谷 P1088 火星人,代码包括康托展开,变进制数进位合法调整,康托展开逆运算

转载于:https://www.cnblogs.com/Asurudo/p/11269373.html

你可能感兴趣的文章
UITabbarController的UITabbarItem(例:"我的")点击时,判断是否登录
查看>>
UNIX基础知识之输入和输出
查看>>
【洛谷 P1666】 前缀单词 (Trie)
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>