【Codeforces】-612A-The Text Splitting(数学)
2016-07-22 08:42
405 查看
<a target=_blank href="http://codeforces.com/problemset/problem/612/A">点击打开题目链接</a>
A. 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 = 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.
Examples
input
output
input
output
input
output
input
output
n可以整除p或q是比较好写的情况。
还有就是x*p+y*q=l,虽然情况可能很多但是写出一种就好,求出一个x,y就出来了。
#include<cstdio>
#include<cstring>
int main()
{
int n,p,q;
char a[110];
while(~scanf("%d %d %d",&n,&p,&q))
{
scanf("%s",a);
int k=1,num=0;
for(k=1;k<=n/p;k++)
{
if((n-p*k)%q==0)
break;
else
num++;
}
if(num!=n/p)
{
printf("%d\n",k+(n-k*p)/q);
int i=0;
for(int z=0;z<k;z++)
{
for(int j=1;j<=p;j++)
{
printf("%c",a[i]);
i++;
}
printf("\n");
}
int ant=(n-k*p)/q;
for(int z=0;z<ant;z++)
{
for(int j=1;j<=q;j++)
{
printf("%c",a[i]);
i++;
}
printf("\n");
}
}
else if(n%p==0)
{
printf("%d\n",n/p);
int i=0;
for(int k=0;k<n/p;k++)
{
for(int j=1;j<=p;j++)
{
printf("%c",a[i]);
i++;
}
printf("\n");
}
}
else if(n%q==0)
{
printf("%d\n",n/q);
int i=0;
for(int k=0;k<n/q;k++)
{
for(int j=1;j<=q;j++)
{
printf("%c",a[i]);
i++;
}
printf("\n");
}
}
else
printf("-1\n");
}
}
A. 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 = 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.
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
n可以整除p或q是比较好写的情况。
还有就是x*p+y*q=l,虽然情况可能很多但是写出一种就好,求出一个x,y就出来了。
#include<cstdio>
#include<cstring>
int main()
{
int n,p,q;
char a[110];
while(~scanf("%d %d %d",&n,&p,&q))
{
scanf("%s",a);
int k=1,num=0;
for(k=1;k<=n/p;k++)
{
if((n-p*k)%q==0)
break;
else
num++;
}
if(num!=n/p)
{
printf("%d\n",k+(n-k*p)/q);
int i=0;
for(int z=0;z<k;z++)
{
for(int j=1;j<=p;j++)
{
printf("%c",a[i]);
i++;
}
printf("\n");
}
int ant=(n-k*p)/q;
for(int z=0;z<ant;z++)
{
for(int j=1;j<=q;j++)
{
printf("%c",a[i]);
i++;
}
printf("\n");
}
}
else if(n%p==0)
{
printf("%d\n",n/p);
int i=0;
for(int k=0;k<n/p;k++)
{
for(int j=1;j<=p;j++)
{
printf("%c",a[i]);
i++;
}
printf("\n");
}
}
else if(n%q==0)
{
printf("%d\n",n/q);
int i=0;
for(int k=0;k<n/q;k++)
{
for(int j=1;j<=q;j++)
{
printf("%c",a[i]);
i++;
}
printf("\n");
}
}
else
printf("-1\n");
}
}
相关文章推荐
- 【C/C++】将字符串中间的空格替换为"%20"
- Bulbs
- 8086汇编语言自学经验分享 使用masm编译源文件
- org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSessionRepositoryFilter' is defined
- JAX-WS HandlerChain使用详解
- 你不得不读的好书 ——《此生未完成》读后感
- java之List的实现类ArrayList
- 通过GP加载卫星云图-雷达图-降雨预报图
- 使用do...while的方法输入一个月中所有的周日(实例代码)
- 【CodeForces】580B - Kefa and Company(二分)
- 欧几里德和扩展欧几里德
- 020——hibernate对象导航查询
- wxpython 窗口排版- proportion/flag/border参数说明
- windows下内存泄露检测
- t460p
- 快速读入
- [Cloud Computing]Mechanisms: Resource Cluster
- 云计算的三种服务模式 (IaaS SaaS PaaS)
- 一段经典的node.js 数据库高并发实现
- CodeForces 597A Divisibility(技巧)