The Text Splitting (将字符串分成若干份,每份长度为p或q)

Description

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 Input

Input

5 2 3Hello

Output

2Hello

Input

10 9 5Codeforces

Output

2Codeforces

Input

6 4 5Privet

Output

-1

Input

8 1 1abacabac

Output

8abacabac
 1 #include<cstdio>
 2 char s[1000000];
 3 int main()
 4 {
 5     int n,p,q,k,l1,l2,l,g;
 6     while(scanf("%d %d %d",&n,&p,&q)!=EOF)
 7     {
 8             scanf("%s",&s);
 9             g=1;
10             if(n % p == 0 || n % q == 0)
11             {
12                 l1=(n%p == 0)?p:q;
13                 l2=n/l1;
14                 k=-1;
15                 printf("%d\n",l2);
16                 while(l2--)
17                 {
18                     l=l1;
19                     while(l--)
20                     {
21                         printf("%c",s[++k]);
22                     }
23                     printf("\n");
24                 }
25             }
26             else
27             {
28                 for(int i = 1; i < n ; i++)
29                 {
30                     for( int j = 1; j < n ; j++)
31                     {
32                         if(i*p+j*q == n)
33                         {
34                             printf("%d\n",i+j);
35                             k=-1;
36                             while(i--)
37                             {
38                                 l=p;
39                                 while(l--)
40                                 {
41                                     printf("%c",s[++k]);
42                                 }
43                                 printf("\n");
44                             }
45
46                             while(j--)
47                             {
48                                 l=q;
49                                 while(l--)
50                                 {
51                                     printf("%c",s[++k]);
52                                 }
53                                 printf("\n");
54                             }
55                             g=0;
56                             break;
57                         }
58                     }
59                     if(g == 0) break;
60                 }
61                 if(g != 0) printf("-1\n");
62            }
63
64
65     }
66
67 }
时间: 2024-11-05 15:58:45

The Text Splitting (将字符串分成若干份,每份长度为p或q)的相关文章

把一个钝角三角形分成若干个锐角三角形

今天看到一个有趣的问题,如何将一个钝角三角形分成若干个锐角三角形,猛一看并不觉得太难,自己随手在纸上作画,结果怎么都没成功,搜索答案竟然是这样的 这个图一看就叫人拍案叫绝啊,很直观啊的结果.恐怕我是想不到的.

Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)

将一个大文件分成若干个小文件方法 例如将一个BLM.txt文件分成前缀为 BLM_ 的1000个小文件,后缀为系数形式,且后缀为4位数字形式 先利用 wc -l BLM.txt       读出 BLM.txt 文件一共有多少行 再利用 split 命令 split -l 2482 ../BLM/BLM.txt -d -a 4 BLM_ 将 文件 BLM.txt 分成若干个小文件,每个文件2482行(-l 2482),文件前缀为BLM_ ,系数不是字母而是数字(-d),后缀系数为四位数(-a 4

codeforces 612A The Text Splitting(扩展欧几里得)

A. The Text Splitting 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"

将一个大文件分成若干个小文件方法

例如将一个BLM.txt文件分成前缀为 BLM_ 的1000个小文件,后缀为系数形式,且后缀为4位数字形式 先利用 wc -l BLM.txt       读出 BLM.txt 文件一共有多少行 再利用 split 命令 split -l 2482 ../BLM/BLM.txt -d -a 4 BLM_ 将 文件 BLM.txt 分成若干个小文件,每个文件2482行(-l 2482),文件前缀为BLM_ ,系数不是字母而是数字(-d),后缀系数为四位数(-a 4)

海滩上有一堆桃子,五只猴子来分。 第一只猴子把这堆桃子平均分为五份,多了一个, 这只猴子把多的一个扔入海中,拿走了一份。 * 第二只猴子把剩下的桃子又平均分成五份,又多了一个, 它同样把多的一个扔入海中,拿走了一份, 第三、第四、第五只猴子都是这样做的, * 问海滩上原来最少有多少个桃子?

题目:海滩上有一堆桃子,五只猴子来分. 第一只猴子把这堆桃子平均分为五份,多了一个, 这只猴子把多的一个扔入海中,拿走了一份. * 第二只猴子把剩下的桃子又平均分成五份,又多了一个, 它同样把多的一个扔入海中,拿走了一份, 第三.第四.第五只猴子都是这样做的, * 问海滩上原来最少有多少个桃子? 思路1: 逆序 原来 第1只 第2只 第3只 第4只 第5只 n n-n/5-1 m-m/5-1 x-x/5-1 使用递归来解决问题 public class 第四十一题猴子分桃子 { public s

海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。 第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份, 第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?

/* 海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份. 第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份, 第三.第四.第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子? 解题思路: 从第五步逆推: 5x+1=4y; 4y+y+1=4z; 4z+z+1=4p; 4p+p+1=4s; 4s+s+1=最初 y=(5x+1)/4; 4z=5y+1=(5x+1)/4*5+1 */ #inc

华为OJ:2290 字符串最后一个单词的长度

用JAVA就很简单,只要用spilt函数,再输出最后一个字符串. 题意是要求你先自己写分隔好字符串这样子.有个比较坑的地方就是测试用例应该有个全为空的,要注意. import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner input=new Scanner(System.in); String s=input.nextLine(); String ss[]=s.spli

字符串最后一个单词的长度

题目描述 计算字符串最后一个单词的长度,单词以空格隔开. 输入描述 一行字符串 输出描述 整数N,最后一个单词的长度. 输入例子 hello world 输出例子 5 方法1 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNextLine()) { String str =

华为训练题目:初级——字符串最后一个单词的长度

初级 字符串最后一个单词的长度 描述 计算字符串最后一个单词的长度,单词以空格隔开. 知识点 字符串,循环 运行时间限制 0M 内存限制 0 输入 一行字符串,长度小于128. 输出 整数N,最后一个单词的长度. 样例输入 hello world 样例输出 5 思路:这道题字符串可能中间有空格,可能后面最后有空格. 先将下标从后往前指到最后一个不是空字符的方,再开始计数 1 #include<iostream> 2 #include<string> 3 using namespac