Educational Codeforces Round 4 A. The Text Splitting
2015-12-26 17:07
477 查看
[align=center]A. The Text Splitting[/align]
[align=center]time limit per test[/align]
[align=center]1 second[/align]
[align=center]memory limit per test[/align]
[align=center]256 megabytes[/align]
[align=center]input[/align]
[align=center]standard input[/align]
[align=center]output[/align]
[align=center]standard output[/align]
You are given the string s of length
n and the numbers p, q. Split the string
s to pieces of length
p and q.
For example, the string "Hello" for
p = 2, q = 3 can be split to the two strings "Hel" and "lo" or to the two strings "He"
and "llo".
Note it is allowed to split the string s to the strings only of length
p or to the strings only of length
q (see the second sample test).
Input
The first line contains three positive integers n, p, q (1 ≤ p, q ≤ n ≤ 100).
The second line contains the string s consists of lowercase and uppercase latin letters and digits.
Output
If it's impossible to split the string s to the strings of length
p and q print the only number "-1".
Otherwise in the first line print integer k — the number of strings in partition of
s.
Each of the next k lines should contain the strings in partition. Each string should be of the length
p or q. The string should be in order of their appearing in string
s — from left to right.
If there are several solutions print any of them.
Sample test(s)
Input
Output
Input
Output
Input
Output
Input
Output
题意:给出一个字符串和整数p、q问是否能按照p、q来划分整个字符串,就是问能不能用p、q凑成字符串的长度。
思路:别人用dp,或者是直接模拟,我当时就只用了dfs,赛后还被hack了,后来改成记忆化dfs,思维还是挺重要的。
[align=center]time limit per test[/align]
[align=center]1 second[/align]
[align=center]memory limit per test[/align]
[align=center]256 megabytes[/align]
[align=center]input[/align]
[align=center]standard input[/align]
[align=center]output[/align]
[align=center]standard output[/align]
You are given the string s of length
n and the numbers p, q. Split the string
s to pieces of length
p and q.
For example, the string "Hello" for
p = 2, q = 3 can be split to the two strings "Hel" and "lo" or to the two strings "He"
and "llo".
Note it is allowed to split the string s to the strings only of length
p or to the strings only of length
q (see the second sample test).
Input
The first line contains three positive integers n, p, q (1 ≤ p, q ≤ n ≤ 100).
The second line contains the string s consists of lowercase and uppercase latin letters and digits.
Output
If it's impossible to split the string s to the strings of length
p and q print the only number "-1".
Otherwise in the first line print integer k — the number of strings in partition of
s.
Each of the next k lines should contain the strings in partition. Each string should be of the length
p or q. The string should be in order of their appearing in string
s — from left to right.
If there are several solutions print any of them.
Sample test(s)
Input
5 2 3 Hello
Output
2 He llo
Input
10 9 5 Codeforces
Output
2 Codef orces
Input
6 4 5 Privet
Output
-1
Input
8 1 1 abacabac
Output
8 a b a c a b a c
题意:给出一个字符串和整数p、q问是否能按照p、q来划分整个字符串,就是问能不能用p、q凑成字符串的长度。
思路:别人用dp,或者是直接模拟,我当时就只用了dfs,赛后还被hack了,后来改成记忆化dfs,思维还是挺重要的。
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; char s[105], put[205]; int c[105], vis[105], u; int n, p, q; int dfs(int now, int use, int o) { //printf("%d\n", vis[now + use]); if(vis[now + use] == use) return 0;//同样的方法已经试过 if(now + use > n) return 0; c[o] = use; vis[now + use] = use; if(now + use == n){ u = o; return 1; } if(dfs(now + use, p, o + 1)) return 1; if(dfs(now + use, q, o + 1)) return 1; return 0; } int main() { int i, len, start, have, p1, now, j; scanf("%d %d %d", &n, &p, &q); scanf("%s", s); len = strlen(s); p1 = now = 0; if(dfs(0, q, 0)==0&&dfs(0, p, 0)==0){ printf("-1\n"); }else{ //printf("%d\n", u); i = 0; while(i <= u) { start = c[i++]; for(j = now;j < now + start;j++) put[p1++] = s[j]; put[p1++] = '\n'; now = now + start; //printf("%d\n", now); } printf("%d\n", u + 1); printf("%s", put); } }
相关文章推荐
- [置顶] android 添加阴影引导
- 用友android
- Shell --awk
- iOS支付宝支付
- Android大图片裁剪终极解决方案
- Android通过Mainfest设置Theme实现布局全屏
- ZOJ 1298_Domino Effect
- 项目中遇到的bug总结
- iOS中判断数组长度问题
- ZOJ 1298_Domino Effect
- ZOJ 1298_Domino Effect
- hdu1213 并查集
- 23种设计模式(1)_创建型_单例模式(Singleton Pattern)
- iOS开发- 隐藏状态栏(电池栏)
- LVS集群之十种调度算法及负载均衡(配置篇)
- Light OJ 1429 - Assassin`s Creed (II)
- 往PNG图像文件写数据
- 汇编实现“比较三个数,取中间”
- 【郑轻】[1781]和尚特烦恼7——念经
- 几番周折后的稳定