Square Distance

 Accepts: 73
 Submissions: 598
 Time Limit: 4000/2000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
一个字符串被称为square当且仅当它可以由两个相同的串连接而成. 例如, "abab", "aa"是square, 而"aaa", "abba"不是.

两个长度相同字符串之间的hamming distance是对应位置上字符不同的位数.

Alex有个偶数长度的字符串ss1s2...sns=s​1​​s​2​​...s​n​​. 他想要找到一个字典序最小的square tt1t2...tnt=t​1​​t​2​​...t​n​​ 使得ss和tt之间的hamming distance恰好是mm. 另外, ss和tt仅包含小写英文字母.
输入描述
输入包含多组数据, 第一行包含一个整数TT 1T500(1≤T≤500)表示测试数据组数. 对于每组数据:

第一行包含两个整数nn和mm 1n10000mnn(1≤n≤1000,0≤m≤n,n is even)表示字符串的长度和hamming distance. 第二行包含一个字符串ss.
输出描述
对于每组数据, 如果不存在这样的一个square, 输出"Impossible" (不包含引号). 否则, 输出字典序最小的square.
输入样例
3
4 1
abcd
4 2
abcd
4 2
abab
输出样例
Impossible
abab
aaaa

因为要字典序最小打印,所以倒着保存状态
f[i][j]表示i到n/2且hamming distance为j是否可行
DP一遍之后贪心从头开始选择就行了
//
// main.cpp
// bc87-1002
//
// Created by Candy on 10/1/16.
// Copyright © 2016 Candy. All rights reserved.
// #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <string>
using namespace std;
const int N=,V=1e6+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x;
}
int T,n,m,l,d[N][N];//dao xu
char s[N],t[N];
void dp(){
memset(d,,sizeof(d));
d[l+][]=;
for(int i=l;i>=;i--)
for(int j=;j<=m;j++){
if(s[i]==s[i+l]) {
d[i][j]|=d[i+][j];
if(j>=) d[i][j]|=d[i+][j-];
}else{
if(j>=) d[i][j]|=d[i+][j-];
if(j>=) d[i][j]|=d[i+][j-];
}
//printf("d %d %d %d\n",i,j,d[i][j]);
}
if(!d[][m]){printf("Impossible\n");return;}
int res=m;
for(int i=;i<=l;i++)
for(int k=;k<;k++){
int tmp=(s[i]-'a'!=k)+(s[i+l]-'a'!=k);
if(d[i+][res-tmp]){
t[i]=t[i+l]=k+'a';
res-=tmp;
break;
}
}
for(int i=;i<=n;i++) putchar(t[i]);
putchar('\n');
}
int main(int argc, const char * argv[]) {
T=read();
while(T--){
n=read();m=read(); l=n/;
scanf("%s",s+);
dp();
}
return ;
}

BestCoder Round #87 1002 Square Distance[DP 打印方案]的更多相关文章

  1. HDU 5903 - Square Distance [ DP ] ( BestCoder Round #87 1002 )

    题意: 给一个字符串t ,求与这个序列刚好有m个位置字符不同的由两个相同的串拼接起来的字符串 s, 要求字典序最小的答案    分析: 把字符串折半,分成0 - n/2-1 和 n/2 - n-1 d ...

  2. BestCoder Round #87 1003 LCIS[序列DP]

    LCIS  Accepts: 109  Submissions: 775  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: 65536/65 ...

  3. HDU 5904 - LCIS (BestCoder Round #87)

    HDU 5904 - LCIS [ DP ]    BestCoder Round #87 题意: 给定两个序列,求它们的最长公共递增子序列的长度, 并且这个子序列的值是连续的 分析: 状态转移方程式 ...

  4. 暴力+降复杂度 BestCoder Round #39 1002 Mutiple

    题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...

  5. 矩阵快速幂---BestCoder Round#8 1002

    当要求递推数列的第n项且n很大时,怎么快速求得第n项呢?可以用矩阵快速幂来加速计算.我们可以用矩阵来表示数列递推公式比如fibonacci数列 可以表示为 [f(n)   f(n-1)] = [f(n ...

  6. 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

    题目传送门 /* 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 当然有可能两个数和超过p,那么an的值最优,每 ...

  7. Manacher BestCoder Round #49 ($) 1002 Three Palindromes

    题目传送门 /* Manacher:该算法能求最长回文串,思路时依据回文半径p数组找到第一个和第三个会文串,然后暴力枚举判断是否存在中间的回文串 另外,在原字符串没啥用时可以直接覆盖,省去一个数组空间 ...

  8. 二分图判定+点染色/并查集 BestCoder Round #48 ($) 1002 wyh2000 and pupil

    题目传送门 /* 二分图判定+点染色:因为有很多联通块,要对所有点二分图匹配,若不能,存在点是无法分配的,no 每一次二分图匹配时,将点多的集合加大最后第一个集合去 注意:n <= 1,no,两 ...

  9. hdu 5195 DZY Loves Topological Sorting BestCoder Round #35 1002 [ 拓扑排序 + 优先队列 || 线段树 ]

    传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131 ...

随机推荐

  1. 免费素材:包含 250+ 组件的 DO UI Kit

    DO UI kit 现在可以免费用于 Photoshop 和 Sketch 了.它有超过130个屏幕,10个完整的主题以及250+的组件混合以创造惊人的应用.他们都是再混合和视网膜.最重要的是他们看起 ...

  2. 24个很赞的 Node.js 免费教程和在线指南

    JavaScript 最初是用来创建动态网站效果的的前端语言.而如今,这门脚本语言也可以用作后端开发,用于搭建 Web 服务器,开发接口,甚至创建博客.在下面这个列表中包括24个 Node.js 教程 ...

  3. 【JavaScript】内置对象Math

    Math是具有用于数学常数和函数的属性和方法一内置对象.不是函数对象. 描述编辑 不像其他的全局对象,Math不是一个构造函数.所有属性和方法Math都是静态的.你指的是常数pi为Math.PI你调用 ...

  4. Welcome Phalcon

    Welcome! 欢迎来到 Phalcon 框架, 一种崭新的 PHP 框架.我们的使命是给开发者一个开发 web 站点和应用的高级工具,让开发者不用担心框架的性能问题. Phalcon 是什么? P ...

  5. 汉王云名片识别(SM)组件开发详解

    大家好,最近在DeviceOne平台上做了一个汉王云名片识别的功能组件.下面把我开发过程给大家做一个分享,希望可以帮助到大家. 下面我把我的思路给大家讲解一下.   1.找到我要集成的sdk,也就是汉 ...

  6. JavaScript学习笔记-JSON对象

    JSON 是一种用来序列化对象.数组.数值.字符串.布尔值和 null 的语法.它基于 JavaScript 语法,但是又有区别:一些 JavaScript 值不是 JSON,而某些 JSON 不是 ...

  7. 一个解决表单中的文字和文本区域(textarea)上对齐的方法

    在进行表单布局的时候通常会遇到这样的情况 文本和textarea标签是底部对齐的 <p><em>邮箱</em><textarea style='height: ...

  8. ae保存图层

    public static void OperateMapDoc(AxMapControl axMapC,string path, string strOperateType) { try { /// ...

  9. arcgis server 下无法执行复杂的运算符

    1.Open the Administrator Directory and log in as a user with administrative permissions to the site. ...

  10. Android 手机卫士--九宫格使用

    本文地址:http://www.cnblogs.com/wuyudong/p/5907736.html,转载请注明源地址. 采用GridView来实现,和ListView使用方式类似,列数(3列) 首 ...