CodeForces 612A The Text Splitting (分拆字符串)

time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

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 = 2q = 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.

Examples
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
题意:
给你一串字符,两个分割形式,输出被全部分割后的一种方案。

思路:
暴力进行循环就可以了,这可比分情况讨论容易多了。

代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#define MYDD 113

using namespace std;

int main() {
	char wqs[MYDD];
	int s,p,q;
	int flag;//用于判断能否被完整分割 ,能被分割 flag=1
	while(scanf("%d %d %d",&s,&p,&q)!=EOF) {
		scanf("%s",wqs);
		flag=0;
		for(int j=0; j<=s/p; j++) {
			for(int i=0; i<=s/q; i++) {
				if(j*p+i*q==s) {
					flag=1;
					printf("%d\n",j+i);

					int v=0;//标记输出个数
					if(j) {
						for(int l=0,k=1; l<s; l++,k++) {//输出串 p
							printf("%c",wqs[l]);
							if(k%p==0) {
								printf("\n");
								v++;
								///	printf("*v**k**%d*%d***\n",v,k);
							}
							if(v==j)
								break;
						}
					}

					//	printf("*v*****%d***\n",v);
					for(int l=v*p,k=1; l<s; l++,k++) {//输出串 q
						printf("%c",wqs[l]);
						if(k%q==0) {
							printf("\n");
						}
					}

					break;
				}
			}
			if(flag)
				break;
		}

		if(!flag)
			puts("-1");
	}
	return 0;
}
/*

11 2 3
abcdefhgilj

11 3 2
Helloabcdez


12 4 2
Helloabcdezq


15 9 5
Codeforcesqwert

5 2 3
Hello

*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值