定义一个数字为幸运数字当且仅当它的所有数位都是4或者7。
比如说,47、744、4都是幸运数字而5、17、467都不是。
现在想知道在1...n的第k小的排列(permutation,https://en.wikipedia.org/wiki/Permutation)中,有多少个幸运数字所在的位置的序号也是幸运数字。

解法:康拓展开模拟即可,,最多置换了13位(全排列超过了1e9,前面的直接枚举所有幸运数字)

  1. //#pragma comment(linker, "/stack:200000000")
  2. //#pragma GCC optimize("Ofast,no-stack-protector")
  3. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  4. //#pragma GCC optimize("unroll-loops")
  5. #include<bits/stdc++.h>
  6. #define fi first
  7. #define se second
  8. #define mp make_pair
  9. #define pb push_back
  10. #define pli pair<long long,int>
  11. #define pi acos(-1.0)
  12. #define ll long long
  13. #define mod (998244353)
  14. #define C 0.5772156649
  15. #define ls l,m,rt<<1
  16. #define rs m+1,r,rt<<1|1
  17. #define pil pair<int,ll>
  18. #define pii pair<int,int>
  19. #define ull unsigned long long
  20. #define base 1000000000000000000
  21. #define fio ios::sync_with_stdio(false);cin.tie(0)
  22.  
  23. using namespace std;
  24.  
  25. const double g=10.0,eps=1e-;
  26. const int N=+,maxn=+,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
  27.  
  28. ll f[N];
  29. void init()
  30. {
  31. f[]=f[]=;
  32. for(int i=;i<=;i++)
  33. {
  34. f[i]=f[i-]*i;
  35. // printf("%lld ",f[i]);
  36. }
  37. // puts("");
  38. }
  39. int cal(ll x,ll y)
  40. {
  41. while(x)
  42. {
  43. if(x%!=&&x%!=)return ;
  44. x/=;
  45. }
  46. while(y)
  47. {
  48. if(y%!=&&y%!=)return ;
  49. y/=;
  50. }
  51. return ;
  52. }
  53. int main()
  54. {
  55. init();
  56. // printf("%d\n",cal(4,4));
  57. ll n,k,ans=;
  58. scanf("%lld%lld",&n,&k);
  59. k--;
  60. vector<ll>v;
  61. for(ll i=max(1ll,n-+);i<=n;i++)v.pb(i);
  62. for(ll i=max(1ll,n-+);i<=n;i++)
  63. {
  64. // printf("%lld\n",f[n-i]);
  65. ll x=k/f[n-i];
  66. ll r=k%f[n-i];
  67. k=r;
  68. sort(v.begin(),v.end());
  69. // for(int j=0;j<v.size();j++)printf("%d ",v[j]);
  70. // printf("%d+++%d++++%d--%d\n",i,x,v[x],cal(i,v[x]));
  71. ans+=cal(i,v[x]);
  72. v.erase(v.begin()+x);
  73. }
  74. v.clear();
  75. for(int i=;i<=;i++)
  76. {
  77. for(int j=;j<(<<i);j++)
  78. {
  79. ll res=;
  80. for(int k=;k<i;k++)
  81. {
  82. if((j>>k)&)res=res*+;
  83. else res=res*+;
  84. }
  85. v.pb(res);
  86. }
  87. }
  88. // for(int i=0;i<v.size();i++)printf("%lld\n",v[i]);
  89. sort(v.begin(),v.end());
  90. for(int i=;i<v.size();i++)
  91. if(v[i]<=max(0ll,n-))
  92. ans++;
  93. printf("%lld\n",ans);
  94. return ;
  95. }
  96. /********************
  97.  
  98. ********************/

牛客练习赛13D的更多相关文章

  1. 牛客练习赛13D 幸运数字4

    题目链接:https://ac.nowcoder.com/acm/contest/70/D 题目大意: 略 分析: 注意到12! < 10^9 < 13!,于是当n > 13时,第k ...

  2. 牛客练习赛13D:幸运数字Ⅳ(康托展开) F:关键字排序

    链接:https://www.nowcoder.com/acm/contest/70/D 题目: 定义一个数字为幸运数字当且仅当它的所有数位都是4或者7. 比如说,47.744.4都是幸运数字而5.1 ...

  3. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  4. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  5. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A

    牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...

  6. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  7. 牛客练习赛28-B(线段树,区间更新)

    牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ ​ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, ​ 1 l r 询问区间[l,r]内的元素和 ​ 2 l r 询问区间[l,r]内的 ...

  8. 牛客练习赛26:D-xor序列(线性基)

    链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...

  9. [堆+贪心]牛客练习赛40-B

    传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费  x_i 的时间,同时完成第 i 个任务的时间不 ...

随机推荐

  1. java工程编写manifest文件

    如果需要一个可以单独运行的jar包“Runnable JAR file”,省事的方法是妥妥的选择打一个可运行的jar包“Runnable JAR file”.如此一来,就可以把程序运行所依赖的类.第三 ...

  2. https://www.cnblogs.com/yuanchenqi/articles/6755717.html

    知识预览 一 进程与线程的概念 二 threading模块 三 multiprocessing模块 四 协程 五 IO模型 回到顶部 一 进程与线程的概念 1.1 进程 考虑一个场景:浏览器,网易云音 ...

  3. Java基础 - 可变字符串 StringBuffer

    StringBuffer 类是线程安全的可变字符序列,一个类似于String类的字符串缓冲区,两者本质上是一样的,但StringBuffer类的执行效率要比String类快很多.String类创建的字 ...

  4. ArcGIS runtime sdk for wpf 授权

    这两天由于runtime sdk for wpf的授权和runtime sdk 其他产品的授权的不一样导致自己混乱不堪. 总结下吧. sdk 简介 当前ArcGIS runtime sdk 包括一系列 ...

  5. 《CNI specification》翻译

    Overview 本文提出了一个通用的基于插件的Linux容器网络解决方案,容器网络接口,CNI.它脱胎于旨在满足大多数rtk网络设计的rtk Networking Proposal. 首先,我们对如 ...

  6. 阿里巴巴 JAVA 开发手册

    阿里巴巴 JAVA 开发手册 1.0.0 阿里巴巴集团技术部 2016.12.7 首次向 Java 业界公开 一. 编程规约(一) 命名规约1. [强制]所有编程相关命名均不能以下划线或美元符号开始, ...

  7. Linux学习笔记—文件与文件系统的压缩与打包(转载)

    压缩文件的用途与技术 例如,计算机都是以byte单位来计量的,1byte占8bit.如果存储数字1,那么1byte就会空出7bit.采用一定的计算方式,压缩这些空间可以大大降低文件存储. Linux系 ...

  8. Hadoop应用开发实战案例 第2周 Web日志分析项目 张丹

    课程内容 本文链接: 张丹博客 http://www.fens.me 用Maven构建Hadoop项目 http://blog.fens.me/hadoop-maven-eclipse/程序源代码下载 ...

  9. NHibernate MappingException. No Persister

    在另一个Visual Studio项目(议会mm.k.Infrastructure)我有我的映射文件(一个映射目录),我的hibernate.cfg.xml和一些仓库. 这是我的映射文件: <? ...

  10. 5. Longest Palindromic Substring(最长回文子串 manacher 算法/ DP动态规划)

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...