[2019上海网络赛F题]Rhyme scheme
题目链接
题意,求出合法的长度为n的字典序第k小字符串,合法的定义为除了最后一位,每一位的取值范围为'A'到'A'+pos-1,而最后一位的取值范围'A'到当前字符串最大值+1。
队友tql,Orz
一开始就想爆搜,但是不知道如何判断当前位为X时的合法字符串个数。然后队友就莽过去了Orz。
大致做法就是类似数位dp的方式预处理出第i位为j时有多少合法字符串,这样求答案时就可以直接判断能否满足第k个,满足就继续搜下去,不满足就k-dp[i][j]。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef __int128 ll; 4 const int mod = 1e9 + 7; 5 ll dp[30][30]; 6 int ans[30]; 7 int n; ll k; 8 ll read() { 9 ll x = 0, f = 1; 10 char c = getchar(); 11 for (; !isdigit(c); c = getchar()) if (c == '-') f = -1; 12 for (; isdigit(c); c = getchar()) x = x * 10 + c - '0'; 13 return x * f; 14 } 15 ll dfs(int pos, int limit) { 16 if (pos == n + 1)return 1; 17 if (dp[pos][limit] != -1)return dp[pos][limit]; 18 ll sum = 0; 19 for (int i = 0; i <= limit; i++) 20 sum += dfs(pos + 1, max(limit, i + 1)); 21 dp[pos][limit] = sum; 22 return dp[pos][limit]; 23 } 24 void solve(int pos, int limit, ll k) { 25 if (pos == n) { 26 for (int i = 0; i < n; i++) 27 printf("%c", ans[i] + 'A'); 28 printf("\n"); 29 return; 30 } 31 for (int i = 0; i <= limit; i++) { 32 ll lim = max(limit, i + 1); 33 if (dp[pos + 1][lim] >= k) { 34 ans[pos] = i; 35 solve(pos + 1, lim, k); 36 break; 37 } 38 else 39 k -= dp[pos + 1][lim]; 40 } 41 } 42 int main() { 43 int t, cnt = 1; 44 scanf("%d", &t); 45 while (t--) { 46 scanf("%d", &n); 47 k = read(); 48 for (int i = 0; i <= 26; i++) 49 for (int j = 0; j <= 26; j++) 50 dp[i][j] = -1; 51 for (int i = 0; i < 30; ++i) dp[n][i] = 1; 52 dfs(0, 0); 53 printf("Case #%d: ", cnt++); 54 solve(0, 0, k); 55 } 56 }
转载于:https://www.cnblogs.com/sainsist/p/11525638.html
[2019上海网络赛F题]Rhyme scheme相关推荐
- Peekaboo(2019年上海网络赛K题+圆上整点)
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 你的位置在\(O(0,0)\),\(A\)的位置为\((x_1,y_1)\),\(B\)的位置为\((x_2,y_2)\),现在已知\(a=O ...
- hdu5455(2015沈阳网络赛F题)
题意: 给出一个串,问用题中定义的那些串来组成这个串最少要用多少个. 思路: 没啥说的,注意一下输入的串中可能出现除了c和f的字母. 代码: #include<cstdio> #inclu ...
- 2017acm乌鲁木齐赛区网络赛F题tarjan缩点
poj1236是问把一棵树变成强联通分量,于是答案就是rudu为0的和出度为0的最大值,因为假设入度为0的多一些,先每个出度为0的连接一个入度为0的,那么还剩一些入度为0的,这时候入度为0的随意连接一 ...
- hdu5489(2015合肥网络赛F题)
转载自:http://blog.csdn.net/lwt36/article/details/48774103 题意: 给出一个数列,在其中删除连续的L个数字,使得剩余的数字LIS最大,输出此LIS. ...
- hdu5442(2015长春网络赛F题)
题意: 给出一个字符串,只由'a'~'z'组成,字符串是一个首尾相接的串.我们要找到一个起点,顺时针或者逆时针的读这个串,找到字典序最大的读法,如果有多种,输出起点坐标小的那个,如果起点坐标一样,输出 ...
- 2019上海网络赛icpc
B. Light bulbs: 思路:对前端点排序,然后取前两个区间进行分析,分别为L1,R1,L2,R2.分L1==L2,R1<L2,R1>=L2,L1<L2&&R ...
- 2019上海网络赛 C Triple
链接:Triple - 题库 - 计蒜客 题意:给定三个长度 n 的数组 a , b , c ,求有多少个(i,j,k)满足 ai , bi , ci 三个数构成不严格三角形(可以是直线) 分析:FF ...
- 单片机STM8S测量电压电路_纸张计数测量显示装置+【2019年电赛F题国一获奖作品】...
一 题目要求: 二 设计方案 1.硬件部分 硬件部分的制作,当初我们组内讨论了三套方案 用FCD2214芯片去采,两极板之间的电容,通过FCD2214转化为AD值,经过测试,发现FCD2214的值,受 ...
- 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]路由交换部分答案详解
网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]路由交换部分答案详解 2022年全国职业技能大赛网络系统管理赛项相较2021年再次做出改动,Linux部 ...
最新文章
- 排列(permutation)2_6
- python画图简单代码-简单画图 - python代码库 - 云代码
- Bash scripts
- HttpContext.Current.Cache 过期时间
- 使用存储过程及触发器案例
- 100+经典Java面试题及答案解析
- 来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor
- shell的交互式和非交互式登录
- iPhone 14系列升级巨大:两款Pro版或将配置4800万像素镜头
- Ubuntu18.04 下联想电脑 无法连接WIFI问题解决
- 《JavaScript高级程序设计(第2版)》
- HBase常用操作备忘
- gbq6什么软件能打开_GBQ5是啥文件,用哪个软件打开
- 智慧城市:大数据运营中心 IOC —— Web GIS 地图应用
- 锐捷AP组建无线网络-保姆级教程
- 针对灰产外挂的分析与研究
- 剑指Offer(第二版)-思路简述-第一期(简单难度)
- SQLite3 获取最小可用ID,ID无需包含1
- dd命令参数详解及数据操作实战
- 透过案例看清API接口的作用——演示1688商品详情接口