Codeforces Round #234A

时间:2023-03-09 22:20:08
Codeforces Round #234A

Inna and choose option

    题意:

一个由12个字符('O'或'X')组成的字符串,这12个字符可以排列成a*b(a*b=12)的矩阵,要求矩阵某一列都是'X'。用户输入t个字符串,都是由12个'O'或'X组成,设计函数可求解符合要求矩阵的个数,并且将符合要求的矩阵大小输出。

Input:

第一行输入一个整数t(Range:1-100),t表示要输入的测试数据的个数,下面每一行输入都是一组数据被录入。

Output:

将每组数据的结果放在一行输出,format:n axb axb axb ….

n表示满足要求的矩阵个数,后面是具体的矩阵大小。

    例如:

        Codeforces Round #234A

解题思路:

    可以看出矩阵个数最大为6,分别是(1,12)(2,6)(3,4)(4,3)(6,2)(12,1),将这些情况枚举出来,然后for循环判断矩阵的每一列,若有一列满足条件(全为'X'),那么将这个矩阵行数列数分别保存到一个6行2列的数组的第一行,k来计数,最后k中存的就是满足条件的矩阵个数,数组里面前k行存的就是具体大小。

    代码:

    
 #include <iostream>
using namespace std;
#include <string>
#define MAX 100 int main(void)
{
string s[MAX];
int t;
void inna(string card);
cin >> t;
for(int i=;i<t;i++)
{
cin >> s[i];
} for(int i=;i<t;i++)
{
inna(s[i]);
}
return ;
} void inna(string card)
{
int i,j,k=,m;
bool flag = true;
int a[] = {,,,,,}; // 行数有六中情况
int b[] = {,,,,,}; // 列数
int n[][]; if(card == "OOOOOOOOOOOO") // 12张卡片全为o
{
cout << k << endl;
return; // 结束函数体
} for(i=;i<;i++) // i表示行数
{
for(j=;j<b[i];j++)
{
flag = true;
for(m=;m<a[i];m++)
{
if(card[j+m*b[i]]!='X')
{
flag = false;
break;
}
} if(flag)
{
n[k][] = a[i];
n[k][] = b[i];
k++;
break;
}
}
} cout << k << ' ';
for(i=;i<k;i++)
{
cout << n[i][] << 'x' << n[i][] << ' ';
}
cout << endl;
}

C++ Code

    测试结果:

Codeforces Round #234A