HDU4850 构造一个长度n串,它需要随机长度4子是不相同
n《=50W。(使用26快报)
构造函数:26一个。截至构建26^4不同的字符串,最长的长度26^4+3。如此之大的输出“impossble”,被判重量的四维阵列。
在正向结构的时间(开始一个字符开始后),此,可以构造出26^4-25种子,(bbbb~zzzz),构造不出来,于是,学习了他人方法,把这些放在最前面,再反复上述方法构造就可以(以后都能够用这样的向前推一法构造)。
PS:从中额外学得:若用string 的s=s+char,拼接,速度非常慢。用char s[],然后s[size++]=char,快得多。输出有点意思。直接输出n个就可以,末地址起。
#include<iostream> //46MS
#include<string>
#include<cstdio>
using namespace std;
int mark[26][26][26][26];
char s[480000];
int size=0;
int main()
{
int n;
for(int i=0;i<26;i++)
{
s[size++]=char(i+'a');
s[size++]=char(i+'a');
s[size++]=char(i+'a');
s[size++]=char(i+'a');
}
for(int i=0;i<size-3;i++)
mark[s[i]-'a'][s[i+1]-'a'][s[i+2]-'a'][s[i+3]-'a']=1;
int t1=25,t2=25,t3=25;
for(int i=104;i<=456979;i++)
{
int count1=0;
for(int j=t3+1;count1<2;j++)
{
if(j==26)
{
j=0;
count1++;
}
if(mark[t1][t2][t3][j]==0)
{
mark[t1][t2][t3][j]=1;
char temp=j+'a';
s[size++]=temp;
t1=t2;t2=t3;t3=j;
break;
}
}
}
/* for(int i=0;i<26;i++)
for(int j=0;j<26;j++)
for(int k=0;k<26;k++)
for(int t=0;t<26;t++)
if(mark[i][j][k][t]==0)
printf("%d%d%d%d\n",i,j,k,t);*/
while(cin>>n)
{
if(n>26*26*26*26+3)
{
cout<<"Impossible"<<endl;
continue;
}
else
{
printf("%s\n",s+456979-n);//输出n个字符!后面的是起始地址。
}
}
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
HDU4850 构造一个长度n串,它需要随机长度4子是不相同的更多相关文章
- HDU4850 构造一个长度为n的串,要求任意长度为4的子串不相同
n<=50W.(使用26个字母) 构造方法:26个,最多构造出26^4种不同的串,长度最长是26^4+3,大于是输出"impossble",用四维数组判重.每次向前构造一位( ...
- hdu3065 病毒侵袭持续中 AC自动机入门题 N(N <= 1000)个长度不大于50的模式串(保证所有的模式串都不相同), 一个长度不大于2000000的待匹配串,求模式串在待匹配串中的出现次数。
/** 题目:hdu3065 病毒侵袭持续中 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:N(N <= 1000)个长度不大于50的 ...
- 汇编语言从键盘输入一个字符串(串长不大于80)以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)
(1)从键盘输入一个字符串(串长不大于80). (2)以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z). (3)输出原字符串且令非字母字符闪烁显示. (4)找出字符串中ASCI ...
- Linux内核设计第三周——构造一个简单的Linux系统
Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...
- java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}
/** * 小米关于小米笔试题 数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = * input数组中,除了input[i] 之外的 ...
- 第三节 构造一个简单的Linux系统MenuOS——20135203齐岳
第三节 构造一个简单的Linux系统MenuOS By 20135203齐岳 Linux内核源代码 arch/ 支持不同cpu的源代码 Documentations/ 文档存储 init/ 内核启动相 ...
- R中,定义一个长度为0的向量
定义一个长度为0的向量 > x<-c()> length(x)[1] 0 修改该向量的类型 > class(x)="numeric"> class(x ...
- Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...
- 一个简单的算法,定义一个长度为n的数组,随机顺序存储1至n的的全部正整数,不重复。
前些天看到.net笔试习题集上的一道小题,要求将1至100内的正整数随机填充到一个长度为100的数组,求一个简单的算法. 今天有空写了一下.代码如下,注释比较详细: using System; usi ...
随机推荐
- 数据切分——Atlas读写分离Mysql集群的搭建
关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog ...
- pkusc2015
Mex 题目大意:给出一个序列\(a\),定义\(f(l,r)\)为集合{\(a_l, a_{l+1}, -, a_r\)}的sg值,求\(\sum_i \sum_{j(i\leq j)} f(i,j ...
- git pull 出错 fatal: Could not read from remote repository.Please make sure you have the correct access rights.and the repository exists.
Warning: Permanently added the RSA host key for IP address '192.30.252.131' to the list of known hos ...
- poj 1579 Function Run Fun(记忆化搜索+dp)
题目链接:http://poj.org/problem?id=1579 思路分析:题目给出递归公式,使用动态规划的记忆搜索即可解决. 代码如下: #include <stdio.h> #i ...
- Binary Tree(二叉树+思维)
Binary Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- android面试题之一
在接下来的一段时间,我将收集一些常见面试题,综合网上资料加自己测试与理解,将其总结出来和大家分享,里面难免有一些问题,希望大家提出宝贵意见以便及时更正. 一.Activity.Service.Broa ...
- CentOS配置防火墙
昨天帮朋友配置CentOSserver,一開始为了方便測试直接把防火墙关了.之后便须要配置好防火墙,网上找了几个防火墙规则都有错误,后来发现是博主发帖不认真,有太多字符错误,以下是我整理的亲測可用的防 ...
- c# datagridviewcomboboxcell值无效的解决办法
一直认为是数据库存储的数据和datagridviewcomboboxcell对不上导致,今天碰到两者对应上了,预览的时候还是提示错误, 查看了下网上其他大神的解决方法,是数据库字段类型有误,查看了下, ...
- ThinkPHP - 博客获取列表信息
得到数据: Array ( [0] => Array ( [id] => 5 [name] => PHP [pid] => 0 [sort] => 1 [blog] =& ...
- 【Eclipse】离线插件安装
1.在eclipse里根目录里,dropins里建一个目录,名字叫sonar(这个名字随便),再在svn下面建一个目录eclipse.在根目录里建一个目录links目录,并建一个sonar.link文 ...