题目链接:https://vjudge.net/problem/Gym-101498J
题目:
Given a string s consisting of lowercase English letters and spaces, find a way to split the string s into multiple lines of the same length. Leading and trailing spaces are ignored while computing the length of the new lines.
Note that you cannot split words, for example if s contains the word “amman”, the whole word must be on the same line.
If there is a way to split s into multiple lines print “YES” (without the quotes), otherwise print “NO” (without the quotes).
Input
The first line of the input contains an integer T (1 ≤ T ≤ 250), where T is the number of the test cases.
Each case has one line that contains a string s. All strings are non-empty and the length of each of these strings does not exceed 105 characters.
It is guaranteed that there is only one space between any two words, and there are no leading or trailing spaces in s.
Output
Print T lines, on each line print “YES” (without the quotes) if you can split the given string s into multiple lines of the same length. Otherwise, print “NO” (without the quotes).
Example
Input
2
acm arab collegiate programming contest
acm amman collegiate programming contest
Output
YES
NO
题意: 输入一行字符串,每一行包括一些单词和空格,问你能不能把这个字符串分割为长度相等的几部分,不能从单词中间分割,只能从空格处分割,分割次数不限。
思路: 直接枚举分割的位置,看是否都是空格。
详情见代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
#include <map>
using namespace std;
const int maxn =100000+5;
char s[maxn];
bool ans;
int len;
void solve()
{
for(int i=2; i<=len/2; i++)
{
int j;
for(j=i; j<=len; j+=i)
{
if(s[j]==' ')
{
continue;
}
else
break;
}
if(j-i==len)
{
ans=1;
return;
}
}
return;
}
int main()
{
int T;
scanf("%d",&T);
getchar();
while(T--)
{
ans=0;
s[0]=' ';
gets(s+1);
len=strlen(s);
s[len]=' ';
solve();
if(ans)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}