HDU 4731 Minimum palindrome 打表找规律

题目链接

虽然想到了可能有规律,但是比赛的时候没有去仔细推敲。

暴力打表找出可以得到对应的长度n和对应字符集m所对应的答案

10 1
 1 1 a
 2 2 aa
 3 3 aaa
 4 4 aaaa
 5 5 aaaaa
 6 6 aaaaaa
 7 7 aaaaaaa
 8 8 aaaaaaaa
 9 9 aaaaaaaaa
10 10 aaaaaaaaaa
20 2
 1 1 a
 2 1 ab
 3 2 aab
 4 2 aabb
 5 3 aaaba
 6 3 aaabab
 7 3 aaababb
 8 3 aaababbb
 9 4 aaaababba
10 4 aaaababbaa
11 4 aaaababbaaa
12 4 aaaababbaaaa
13 4 aaaababbaabab
14 4 aaaababbaababb
15 4 aaaababbaababba
16 4 aaaababbaababbaa
17 4 aaaababbaababbaaa
18 4 aaaababbaababbaaaa
19 4 aaaababbaababbaabab
20 4 aaaababbaababbaababb
10 3
 1 1 a
 2 1 ab
 3 1 abc
 4 1 abca
 5 1 abcab
 6 1 abcabc
 7 1 abcabca
 8 1 abcabcab
 9 1 abcabcabc
10 1 abcabcabca
10 4
 1 1 a
 2 1 ab
 3 1 abc
 4 1 abca
 5 1 abcab
 6 1 abcabc
 7 1 abcabca
 8 1 abcabcab
 9 1 abcabcabc
10 1 abcabcabca

然后很容易发现规律,m=1和m=3的时,循环节分别是a和abc,m=2的时候,从长度为9的时候开始循环,循环节为babbaa,然后前面8个打表就行了。

pre { font-family: monospace; color: #ffffff; background-color: #000000 }
body { font-family: monospace; color: #ffffff; background-color: #000000 }
.lnr { color: #ffff00 }
.Statement { color: #ffff00 }
.Special { color: #ffd7d7 }
.Type { color: #87ffaf }
.Constant { color: #ff40ff }
.PreProc { color: #5fd7ff }

 1 #include <stdio.h>
 2 const char ans[][9] = {"a", "ab", "aab", "aabb", "aaaba", "aaabab", "aaababb", "aaababbb"};
 3 int main() {
 4     int T;
 5     scanf("%d", &T);
 6     for (int Tc = 1; Tc <= T; ++Tc) {
 7         int n, m;
 8         scanf("%d%d", &m, &n);
 9         printf("Case #%d: ", Tc);
10         if (m == 1) {
11             for (int i = 0; i < n; ++i)
12                 putchar(‘a‘);
13         }
14         else if (m >= 3) {
15             for (int i = 0; i < n; ++i)
16                 putchar("abc"[i % 3]);
17         }
18         else {
19             if (n <= 8)
20                 printf("%s", ans[n - 1]);
21             else {
22                 printf("aaaa");
23                 for (int i = 4; i < n; ++i)
24                     putchar("babbaa"[(i + 2) % 6]);
25             }
26         }
27         putchar(‘\n‘);
28     }
29     return 0;
30 }

时间: 2024-08-11 01:25:29

HDU 4731 Minimum palindrome 打表找规律的相关文章

hdu 4731 Minimum palindrome(构造)

题目链接:hdu 4731 Minimum palindrome 题目大意:给定n和m,m表示m种字符.求一个长度为n字典序最小的字符串,满足存在的回文子串长度尽量短. 解题思路:构造. m = 1:那么不管n为多少,肯定都用a构造 m > 2: 用abcabc...构造出来的串回文子串长度最多为1 m = 2:对于n <= 8的进行特判,对于长度大于8的,用aababb去构造,因为要字典序最小,而这样构造的串回文子串长度最多为4,所以我们可以在前面加上两个aa.并且如果剩余部分补足一个单位长

HDU 3032 (SG打表找规律)

题意: 有n堆石子,alice先取,每次可以选择拿走一堆石子中的1~x(该堆石子总数) ,也可以选择将这堆石子分成任意的两堆.alice与bob轮流取,取走最后一个石子的人胜利. 思路: 因为数的范围比较大,所以最好通过SG打表的结果找出规律在解. sg(4k+1)=4k+1;sg(4k+2)=4k+2;sg(4k+3)=4k+4; sg(4k)=4k-1; 1 2 4 3 5 6 8 7 Sample Input232 2 323 3 Sample OutputAliceBob SG打表找规律

hdu 2147 kiki&#39;s game(DP(SG)打表找规律)

题意: n*m的棋盘,一枚硬币右上角,每人每次可将硬币移向三个方向之一(一格单位):左边,下边,左下边. 无法移动硬币的人负. 给出n和m,问,先手胜还是后手胜. 数据范围: n, m (0<n,m<=2000) 思路: dp[i][j]=0,说明从(i,j)这个点到时左下角先手败.dp[i][j]=1则先手胜. 然后记忆搜.但是记忆搜会超时. 搜完把整张表打出来,发现规律了,,,,然后,,,代码剩几行了. 代码: ///打表观察 /* int f[2005][2005]; int go(in

HDU 4588 Count The Carries 数位DP || 打表找规律

2013年南京邀请赛的铜牌题...做的很是伤心,另外有两个不太好想到的地方....a 可以等于零,另外a到b的累加和比较大,大约在2^70左右. 首先说一下解题思路. 首先统计出每一位的1的个数,然后统一进位. 设最低位为1,次低位为2,依次类推,ans[]表示这一位上有多少个1,那么有 sum += ans[i]/2,ans[i+1] += ans[i]/2; sum即为答案. 好了,现在问题转化成怎么求ans[]了. 打表查规律比较神奇,上图不说话. 打表的代码 #include <algo

HDU 4919 打表找规律 java大数 map 递归

== oeis: 点击打开链接 瞎了,x.mod(BigInteger.ValueOf(2)).equal( BigInteger.ValueOf(1)) 写成了 x.mod(BigInteger.ValueOf(2)).equal( 1 ) T^T100块没了... import java.math.*; import java.util.*; import static java.lang.System.out; import java.io.*; public class Main { s

HDU 4349 Xiao Ming&#39;s Hope 找规律

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4349 Xiao Ming's Hope Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1723    Accepted Submission(s): 1144 Problem Description Xiao Ming likes coun

【ZOJ】3785 What day is that day? ——浅谈KMP应用之ACM竞赛中的暴力打表找规律

首先声明一下,这里的规律指的是循环,即找到最小循环周期.这么一说大家心里肯定有数了吧,“不就是next数组性质的应用嘛”. 先来看一道题 ZOJ 3785 What day is that day? Time Limit: 2 Seconds      Memory Limit: 65536 KB It's Saturday today, what day is it after 11 + 22 + 33 + ... + NN days? Input There are multiple tes

HDU 6154 CaoHaha&#39;s staff 思维 找规律

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6154 题目描述: 围成一个面积不小于S的多边形, 最少需要多少根儿线段, 线段可以为单元格边或者对角线 解题思路: 最大的面积肯定是由根号2为边长的正方形围成了, 那么我们把所有正方形都遍历一遍, 找出S介于N, N+1的那个上界N+1设为max, 因为MAX所围成的多边形面积和MAX-1, MAX-2, MAX-3围成的多边形面积, 找出满足条件的最小的一个即可 代码: #include <io

hdu 2147 kiki&#39;s game(找规律)

kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total Submission(s): 10656    Accepted Submission(s): 6455 Problem Description Recently kiki has nothing to do. While she is bored, an idea appears in his