http://acm.hust.edu.cn/vjudge/contest/126262#problem/D

分为3种情况,n=1,n=2,n>=3

其中需要注意的是n=2的情况,通过打表找规律

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <cctype>
#include <vector>
#include <iterator>
#include <set>
#include <map>
#include <sstream>
using namespace std; #define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define pb push_back
#define debug printf("!\n")
#define MAXN 100000 +5
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define pqueue priority_queue
#define INF 0x3f3f3f3f #define ls (rt<<1)
#define rs (rt<<1|1) int n,m; char a[MAXN]; int main()
{
int t,kase=,i,j,k;
sf("%d",&t);
while(t--)
{
sf("%d%d",&n,&m);
pf("Case #%d: ",kase++);
if(n==)
{
for(i=;i<m;i++) pf("a");
}
else if(n==)
{
if(m == ) pf("a");
else if(m==) pf("ab");
else if(m==) pf("aab");
else if(m==) pf("aabb");
else if(m==) pf("aaaba");
else if(m==) pf("aaabab");
else if(m==) pf("aaababb");
else if(m==) pf("aaababbb");
else
{
int v = ;
char tmp[] = "aababb";
pf("aa");
for(i=;i<m-;i++)
{
pf("%c",tmp[v++]);
v%=;
}
}
}
if(n>=)
{
int z = ;
char tmp[] = "abc";
for(i=;i<m;i++)
{
pf("%c",tmp[z++]);
z%=;
}
}
blank;
}
return ; }

题目很简单,所以我觉得这题最重要的是打表,我把自己打的表贴一下:

思路是用二进制的0和1代替a,b,因为要字典序最小,所以从1111...一直遍历到0就行

int n,m;

char a[];

bool isp(int x,int y)
{
while(x<y)
{
if(a[x]!=a[y]) return false;
x++;y--;
}
return true;
} int gt()
{
int len = strlen(a);
int ans = ;
for(int i =;i<len;i++)
{
for(int j = i;j<len;j++)
{
if(isp(i,j))
{
ans = max(ans,j-i+);
}
}
}
return ans;
} void get(int v)
{
mem(a,);
int k = ;
int tmp = v;
while(tmp)
{
tmp>>=;
k++;
}
while(v)
{
a[--k] = 'a' + -(v&);
v>>=;
}
} int main()
{
int t,kase=,i,j,k;
for(i=;i>=;i--)
{
int ans,cnt=;
int mx = pow(,i);
int mxx = pow(,i+);
while(mx<mxx)
{
get(mxx);
//pf("%s %d\n",a,gt());
int tmp = gt();
if(cnt>tmp)
{
ans = mxx;
cnt = tmp;
}
mxx--;
}
get(ans);
pf("%s %d\n",a,cnt);
blank;
}
return ;
}

HDU 4731 找规律,打表的更多相关文章

  1. HDU 4731 Minimum palindrome 打表找规律

    http://acm.hdu.edu.cn/showproblem.php?pid=4731 就做了两道...也就这题还能发博客了...虽然也是水题 先暴力DFS打表找规律...发现4个一组循环节.. ...

  2. hdu 5051 找规律?+大trick

    http://acm.hdu.edu.cn/showproblem.php?pid=5051 打表找规律 据说是http://zh.wikipedia.org/wiki/%E6%9C%AC%E7%A6 ...

  3. 汉诺塔问题hdu 2065——找规律

    这类题目就是纸上模拟,找规律. 问题描述:在一块铜板上有三根杆,目的是将最左边杆上的盘全部移到右边的杆上,条件是不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允 ...

  4. hdu 5229 找规律

    假设选择了字符串a和b: 假设两人都按照最聪明的策略,那么观察一下可以找出规律:当a和b的字符串长度之和为奇数的时候zcc会败. 另外当a==b的时候zcc也会败(当时做的时候忘了这个了T^T) 接下 ...

  5. UVA 10706 Number Sequence (找规律 + 打表 + 查找)

    Problem B Number Sequence Input: standard input Output: standard output Time Limit: 1 second A singl ...

  6. HDU 2147 找规律博弈

    题目大意: 从右上角出发一直到左下角,每次左移,下移或者左下移,到达左下角的人获胜 到达左下角为必胜态,那么到达它的所有点都为必败态,每个点的局势都跟左,下,左下三个点有关 开始写了一个把所有情况都计 ...

  7. CF468A | 24 Game 找规律+打表

    (翻译版本来自 Luogu by lonelysir ) 题目描述 小X一直很喜欢一个纸牌游戏:"24点",但最近他发现这个游戏太简单了,所以他发明了一个新游戏. 你有一个整数序列 ...

  8. ACM-ICPC 2018 南京赛区网络预赛 - J. Sum (找规律+打表)

    题意:\(f(i):i\)能拆分成两个数的乘积,且要求这两个数中各自都没有出现超过1次的质因子.每次给出n,求\(\sum_{i=1}^{n}f(i)\) 分析:\(1 \le n \le 2e7\) ...

  9. HDU 1564 找规律博弈

    题目大意是: 从n*n的方格角落的一个起点出发,每次移到上下左右一个未曾到达过的位置,谁不能走了谁就输了 想了好久都想不出,看了大神的题解 Orz了 果然博弈不是脑残的游戏啊... 这里从起点出发,将 ...

随机推荐

  1. python中xml解析

    import xml.dom.minidom input_xml_string = '''<root><a>hello</a></root>'''#打开 ...

  2. postman提取返回值和断言

    将token接口中返回的access_token设置为全局变量. 如:token接口返回格式为: { "data": { "access_token": &qu ...

  3. ASP.Net一般处理程序Session用法

    1.在aspx和aspx.cs中,都是以 Session["type"]="aaa" 和 string aaa=Session["type" ...

  4. C++_异常3-异常机制throw try catch

    下面介绍如何使用异常机制来处理错误. C++异常是对程序运行过程中发生的异常情况的一种响应. 异常提供了将控制权从程序的一部分传递到另一部分的途径. 对异常的处理有3个组成部分: 1)引发异常  -- ...

  5. LeetCode162.寻找峰值

    162.寻找峰值 描述 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数组可能包含多个峰值,在这种情况下 ...

  6. c# MVC返回小驼峰Json(首字母小写)

    1.与前端交互时,前端总希望传过去的json字段名首字母小写,但是.net规范是首字线大写 如果就写了下面的转换方法 /// <summary> /// Poco类字段名转换成首字母小写的 ...

  7. 微信获取用户信息的两个接口和两个ACCESS_TOKEN

    有一段时间没有搞微信开发了 ,今天突然要改一下程序! 回头一看 微信的帮助文档太tm的稀烂的,太难懂了,这做个笔记以后看着方便 微信有2个ACCESS_TOKEN, 1,基础接口的token 获取接口 ...

  8. python 函数的作用域,闭包函数的用法

    一.三元表达式 if条件成功的值    if  条件   else else条件成功的值 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c ...

  9. Oracle 序列(自增ID)

    -- 创建序列CREATE SEQUENCE "JPADMIN"."SEQ_JP_BAS_USER_ID" MINVALUE 1 // 最小值MAXVALUE ...

  10. PIE SDK元素事件的监听

    1功能简介 元素在操作的过程中,如添加,删除,选中等操作都需要有事件的监听,PIE SDK支持对元素操作事件的监听,下面对元素事件的监听进行介绍. 2功能实现说明 2.1.1 实现思路及原理说明 第一 ...