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).
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.
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.
5 2 3 Hello
2 He llo
10 9 5 Codeforces
2 Codef orces
6 4 5 Privet
-1
8 1 1 abacabac
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 */