E. Prefix Free Code

大意: 给定$n$个串, 保证任意一个串都不是另一个串的前缀, 从中选出$k$个串可以拼成$\binom{n}{k}k!$种串. 给定其中一个串, 求这个串的排名.

先用字典树处理一下, 从而转化为给定一个$n$元素中取$k$元素的排列, 求排名.

  1. #include <iostream>
  2. #include <sstream>
  3. #include <algorithm>
  4. #include <cstdio>
  5. #include <cmath>
  6. #include <set>
  7. #include <map>
  8. #include <queue>
  9. #include <string>
  10. #include <cstring>
  11. #include <bitset>
  12. #include <functional>
  13. #include <random>
  14. #define REP(i,a,n) for(int i=a;i<=n;++i)
  15. #define PER(i,a,n) for(int i=n;i>=a;--i)
  16. #define hr putchar(10)
  17. #define pb push_back
  18. #define lc (o<<1)
  19. #define rc (lc|1)
  20. #define mid ((l+r)>>1)
  21. #define ls lc,l,mid
  22. #define rs rc,mid+1,r
  23. #define x first
  24. #define y second
  25. #define io std::ios::sync_with_stdio(false)
  26. #define endl '\n'
  27. #define DB(a) ({REP(__i,1,n) cout<<a[__i]<<',';hr;})
  28. using namespace std;
  29. typedef long long ll;
  30. const int P = 1e9+;
  31. const int N = 1e6+;
  32. ll inv(ll x){return x<=?:inv(P%x)*(P-P/x)%P;}
  33. int n,k,ch[N][],T,val[N],a[N],tot,cnt,len;
  34. char s[N];
  35. void add(int &o, char *s) {
  36. if (!o) o = ++tot;
  37. if (*s) add(ch[o][*s-'a'],s+);
  38. else val[o] = ;
  39. }
  40. void dfs(int o) {
  41. if (!o) return;
  42. if (val[o]) return val[o] = ++cnt,void();
  43. REP(i,,) dfs(ch[o][i]);
  44. }
  45. void find(int o, char *s) {
  46. if (val[o]) a[++*a]=val[o];
  47. else ++len,find(ch[o][*s-'a'],s+);
  48. }
  49.  
  50. int c[N];
  51. void add(int x, int v) {
  52. for (; x<=n; x+=x&-x) c[x]+=v;
  53. }
  54. int qry(int x) {
  55. int ret = ;
  56. for (; x; x^=x&-x) ret+=c[x];
  57. return ret;
  58. }
  59.  
  60. int main() {
  61. scanf("%d%d",&n,&k);
  62. REP(i,,n) scanf("%s",s),add(T,s);
  63. dfs(T);
  64. scanf("%s",s+);
  65. int m = strlen(s+);
  66. REP(i,,m) len=,find(T,s+i),i+=len-;
  67. int tot = ;
  68. REP(i,n-k+,n) tot = (ll)tot*i%P;
  69. REP(i,,n) c[i] = i&-i;
  70. int ans = ;
  71. REP(i,,k) {
  72. tot = (ll)tot*inv(n-i+)%P;
  73. ans = (ans+(ll)qry(a[i]-)*tot)%P;
  74. add(a[i],-);
  75. }
  76. printf("%d\n",ans);
  77. }

H. Recovery

大意: 给定每行每列和的奇偶性, 要求恢复一个$n\times m$的$01$矩阵, 若有多种方案输出$1$个数最多的, 还有多种的话输出字典序最小的.

先初始化全$1$, 那么就转化为要改变某些行某些列的奇偶性, 如果行列需要改动的个数之差为奇数则无解, 偶数时贪心构造一下.

  1. #include <iostream>
  2. #include <sstream>
  3. #include <algorithm>
  4. #include <cstdio>
  5. #include <cmath>
  6. #include <set>
  7. #include <map>
  8. #include <queue>
  9. #include <string>
  10. #include <cstring>
  11. #include <bitset>
  12. #include <functional>
  13. #include <random>
  14. #define REP(i,a,n) for(int i=a;i<=n;++i)
  15. #define PER(i,a,n) for(int i=n;i>=a;--i)
  16. #define hr putchar(10)
  17. #define pb push_back
  18. #define lc (o<<1)
  19. #define rc (lc|1)
  20. #define mid ((l+r)>>1)
  21. #define ls lc,l,mid
  22. #define rs rc,mid+1,r
  23. #define x first
  24. #define y second
  25. #define io std::ios::sync_with_stdio(false)
  26. #define endl '\n'
  27. #define DB(a) ({REP(__i,1,n) cout<<a[__i]<<',';hr;})
  28. using namespace std;
  29. typedef long long ll;
  30. typedef pair<int,int> pii;
  31. const int P = 1e9+, INF = 0x3f3f3f3f;
  32. ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
  33. ll qpow(ll a,ll n) {ll r=%P;for (a%=P;n;a=a*a%P,n>>=)if(n&)r=r*a%P;return r;}
  34. ll inv(ll x){return x<=?:inv(P%x)*(P-P/x)%P;}
  35. inline int rd() {int x=;char p=getchar();while(p<''||p>'')p=getchar();while(p>=''&&p<='')x=x*+p-'',p=getchar();return x;}
  36. //head
  37.  
  38. const int N = ;
  39. int n,m;
  40. vector<int> va,vb;
  41. char ans[N][N],a[N],b[N];
  42.  
  43. int main() {
  44. scanf("%s%s",a+,b+);
  45. n = strlen(a+);
  46. m = strlen(b+);
  47. REP(i,,n) if (m%==&&a[i]==''||m%==&&a[i]=='') va.pb(i);
  48. REP(i,,m) if (n%==&&b[i]==''||n%==&&b[i]=='') vb.pb(i);
  49. int sza = va.size(), szb = vb.size();
  50. if ((sza-szb)&) return puts("-1"),;
  51. REP(i,,n) REP(j,,m) ans[i][j]='';
  52. if (szb>=sza) {
  53. REP(i,,szb-sza-) ans[][vb[i]] = '';
  54. int now = ;
  55. REP(i,szb-sza,szb-) ans[va[now++]][vb[i]] = '';
  56. }
  57. else {
  58. REP(i,,sza-szb-) ans[va[i]][] = '';
  59. int now = ;
  60. REP(i,sza-szb,sza-) ans[va[i]][vb[now++]] = '';
  61. }
  62. REP(i,,n) puts(ans[i]+);
  63. }

NAIPC 2018的更多相关文章

  1. 2018. The Debut Album

    http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...

  2. Math.abs(~2018),掌握规律即可!

    Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...

  3. 肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版

    肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版 下载链接: https://u253469.ctfile.com/fs/253469-229815828

  4. 2018年的UX设计师薪酬预测,你能拿多少?

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具.   一个经验丰富的设计师完全可以根据地区和专业来可以预期薪酬之间的差距,其中悬殊最高可达80K. 本 ...

  5. Hello 2018, Bye 2017

    2017年过去了,过去一年经历了太多,改变了好多好多,可以说人生进入了另一个阶段,有可能是成熟吧. 回顾2017 去年换了新工作,离开了将近工作了8年的公司,不带走一丝云彩,为其任劳任怨,最后没有任何 ...

  6. New Life With 2018

    2017年转眼过去了.对自己来说.这一大年是迷茫和认知的一年.我的第一篇博客就这样记录下自己的历程吧 一:选择 从进入这一行到现在已经一年多了,2016年11月份就像所有的应届毕业生一样,都贼反感毕业 ...

  7. 2017 年终总结 & 2018 年度计划

    不立几个 Flag,都不知道怎么作死 2017 年度计划完成情况: 1.健身时间不少于350天:  未完成 中断了22天,实际运动 343天   2.至少每个月看一本书:  及格 <切尔诺贝利的 ...

  8. [总结]-2018 w1

    不想总结 2017,过去的就过去吧,不过自己在 2017 年还是收获了很多,最重要的就是赚钱.赚钱还是需要两把刷子,所以,2018 的小目标就是学习数据分析和机器学习.希望自己在这两个领域能搞点事情. ...

  9. 2018年手机应用UI设计趋势预测

    用户需求瞬息万变,而手机软件UI设计为适应变化的用户需求,也相应的发生着变化.但是,这并不意味着用户需求和UI设计趋势就是无迹可寻的.事实上,根据前几年的手机app界面设计变化的特点,尤其是2017年 ...

随机推荐

  1. ERA-Interim数据学习

    1.气象再分析数据有很多种,看文献里用到的主要有这几种 ECWRF——ERA-Interim,分辨率0.125°,欧洲的 MERRA-2,分辨率0.625°*0.5°,NASA的 GEOS-5FP,分 ...

  2. SSH登录慢解方案 - 关闭UseDNS加速

    每次登录SSH时总是要停顿等待一会儿才能连接上,,这是因为OpenSSH服务器有一个DNS查找选项UseDNS默认情况下是打开的. UseDNS 选项打开状态下,当通过终端登录SSH服务器时,服务器端 ...

  3. R语言中查询帮助

    可以尝试下面的几种方式 help(lapply,package=,....)?lapply??lapplyhelp.search('lapply')apropos('norm') #函数名记不全时用? ...

  4. Eclipse解决项目中找不到Maven Dependencies

    项目中找不到Maven Dependencies 正常的Maven项目应该是这样的 自己的项目中却没有Maven Dependencies 先做第一步 若项目中还没有出现Maven Dependenc ...

  5. 混合高斯分布与 EM 算法

    极大似然估计在混合高斯分布中遇到的困难 在一般的情况下,对于所得到的样本集,\(X=\left\{x_{1}, \dots, x_{N}\right\}\),我们的目标是最大化似然函数,通过最大化似然 ...

  6. Ubuntu 17.10安装VirtualBox 5.2.2 及相关问题解决

    link:https://www.linuxidc.com/Linux/2017-11/148870.htm sudo apt update && sudo apt upgrade s ...

  7. 内存映射文件MappedByteBuffer和Buffer的Scattering与Gathering

    上一篇讲到的DirectByteBuffer继承自MappedByteBuffer 一.MappedByteBuffer MappedByteBuffer的定义: A direct byte buff ...

  8. php laravel 环境搭建

    最近上一个新项目,时间比较紧,为了满足业务需求,没有办法,只有上我大 php 了,找了一个带些基础的数据结构,用的是 laravel 搭建的,然后寻坑就开始了,先是构建 docker 镜像就坑了,然后 ...

  9. Swift5升级遇到的AVCapturexxxDelegate的坑,写法换了

    升级到swift5之后,遇到关于AVCapture的两个代理都失效了, 找了一圈,发现原因是代理方法写法变了,如果不替换,代理事件就收不到了 解决方法: 替换新写法就可以了 我这边只举例我遇到的两个例 ...

  10. Mac下iTerm2使用

    之前一直使用 Mac OS 自带的终端,用起来虽然有些不太方便,但总体来说还是可以接受的,是有想换个终端的想法,然后今天偶然看到一个终端利器 iTerm2,发现真的很强大,也非常的好用,按照网上配置了 ...