当前位置: 首页 > news >正文

构造字符串 之 hdu 4850 Wow! Such String!

/*
话说之前读题都没读懂。。。
Each substring of A with length equal to or larger than 4 can appear in the string exactly once.
A的每个长度大于等于4的子串出现在传中恰好一次。(即:大于等于4的子串不能重复出现)
 
跟大神学的一种方法。。。
首先,长度为4的字符串有26^4种,故可猜测满足题意的最大长度的字符串的长度是26^4+3 (+3是因为鸽巢原理)。
 
此题关键就在于如何构造满足题意的字符串(废话啊。。。)
用数组used[][][][],来判断长度为4的字符串是否出现重复。
即:在每次增加一个字符(位置为pos),选择字母是时,判断used[str[pos-3]][str[pos-2]][str[pos-1]][str[pos]],是否为true,
若真,说明此子串之前有用过,无法选择该字母,
否则,可选。
复杂度:所能构造的最长字符串*26 <= (500000*26),可AC。。。
 
注意:
要先把 aaaa,bbbb,...,zzzz放到字符串中,否则它们无法被构造出来。
*/
 1 #include <iostream>
 2 #include <cstdlib>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 const int MAX = 500005;
 7 int N, len;
 8 int str[MAX];
 9 bool used[26][26][26][26];
10 
11 
12 int main()
13 {
14     //freopen("input.txt", "r", stdin);
15     //freopen("output.txt", "w", stdout);
16     memset(used, false, sizeof(used));
17     len = 0;
18 
19     for (int i = 0; i < 26; ++i) {
20         for (int j = 0; j < 4; ++j) {
21             str[len++] = i;
22         }
23     }
24 
25 
26     for (int i = 0; i < (len - 3); ++i) {
27         used[str[i]][str[i + 1]][str[i + 2]][str[i + 3]] = true;
28     }
29 
30     bool Judge = true;
31 
32     while (Judge) {
33         Judge = false;
34         for (int i = 0; i < 26; ++i) {
35             if (!used[str[len - 3]][str[len - 2]][str[len - 1]][i]) {
36                 str[len] = i;
37                 used[str[len - 3]][str[len - 2]][str[len - 1]][i] = true;
38                 len++;
39                 Judge = true;
40             }
41         }
42     }
43 
44     while (~scanf("%d", &N)) {
45         if (N > len) {
46             printf("Impossible\n");
47         }
48         else {
49             for (int k = 0; k < N; ++k) {
50                 printf("%c", 'a' + str[k]);
51             }
52             printf("\n");
53         }
54     }
55     return 0;
56 }
 
 

 

 

转载于:https://www.cnblogs.com/shijianming/p/4140814.html

相关文章:

  • Nginx负载均衡demo
  • Mysql 字符串截取
  • Go语言的序列化与反序列化(gob)
  • SqlServer将表中数据复制到另一张表
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • hdu 1222 Wolf and Rabbit
  • css实现移入文字顶部出现提示的效果
  • 【转】使用 Android 的日志工具LogCat
  • 原创教程“ActionScript3.0游戏中的图像编程”开始连载啦!
  • c++避免掩盖继承来的名称
  • MySQL列的默认值主键索引与自增 删除增加与修改
  • DoraemonKit,一款功能齐全的客户端 (iOS、Android) 研发助手,你值得拥有。
  • 欧美斯项目签到功能,实时获取当前所在位置的经纬度
  • 云原生的浪潮下,为什么运维人员适合学习Go语言?
  • HDU 2122 Ice_cream’s world III
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【React系列】如何构建React应用程序
  • Debian下无root权限使用Python访问Oracle
  • Java深入 - 深入理解Java集合
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Python_网络编程
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Rancher如何对接Ceph-RBD块存储
  • Ruby 2.x 源代码分析:扩展 概述
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • windows-nginx-https-本地配置
  • 基于webpack 的 vue 多页架构
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 王永庆:技术创新改变教育未来
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 协程
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一些css基础学习笔记
  • Hibernate主键生成策略及选择
  • ​2021半年盘点,不想你错过的重磅新书
  • ​linux启动进程的方式
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ###STL(标准模板库)
  • #etcd#安装时出错
  • $L^p$ 调和函数恒为零
  • (function(){})()的分步解析
  • (javascript)再说document.body.scrollTop的使用问题
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (简单) HDU 2612 Find a way,BFS。
  • (南京观海微电子)——I3C协议介绍
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (算法)求1到1亿间的质数或素数
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil