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
题目大意:给你一个字符串长度n,一个数字p,一个数字q,问能否用长度p或长度q或两个长度都用,来分割这个字符串,如果能分割的话就输出能分割成几部分,把这几部分输出(多种情况时输出一种即可),不能分割的话输出-1.
解题思路:先看能否单独被p或q分割,如果行的通的话就直接用p或q来分割。如果不行的话就用它俩组合来分割,暴力二重for循环看是否i个p和j个q长度是否等于n,如果等的话就输出当前的情况。。。
看代码:
#include <stdio.h> int main() { int n,p,q; char s[150]; scanf("%d%d%d",&n,&p,&q); getchar(); scanf("%s",s); if(n%p==0) { printf("%d\n",n/p); int step=n/p; for(int i=0;i<n;i++) { for(int j=0;j<p;j++) { printf("%c",s[i]); i++; } if(s[i]!='\0') { i--; } printf("\n"); } return 0; } if(n%q==0) { printf("%d\n",n/q); int step=n/q; for(int i=0;i<n;i++) { for(int j=0;j<q;j++) { printf("%c",s[i]); i++; } if(s[i]!='\0') { i--; } printf("\n"); } return 0; } for(int i=1;i<=100;i++) { for(int j=1;j<=100;j++) { if(i*p+j*q==n) { printf("%d\n",i+j); int ci1=i; int ci2=j; int zhong1=ci1*p; for(int k=0;k<zhong1;k++) { for(int w=0;w<p;w++) { printf("%c",s[k]); k++; } if(k!=zhong1) { k--; } printf("\n"); } for(int k=zhong1;k<n;k++) { for(int w=0;w<q;w++) { printf("%c",s[k]); k++; } if(s[k]!='\0') { k--; } printf("\n"); } return 0; } } } printf("-1\n"); return 0; }