目录
A - Far Relative’s Birthday Cake
B - Far Relative’s Problem
D - Joysticks
E - Beautiful Paintings
A.Far Relative’s Birthday Cake
solution
给一个n*n的列表,分行和列分别考虑。找出每行有几个C,再用排列组合公式C(n,2)求出每行的C有几种组合方式,每一行的组合数相加。再看列,同理。
AC_Code
#include<stdio.h>
int main()
{
int n;
char a[105][105];
int count,sum;
int i,j;
while(~scanf("%d",&n))
{
getchar();
for(i=0; i<n; i++){
scanf("%s",a[i]);
}
for(i=0,sum=0; i<n; i++){
for(j=0,count=0; j<n; j++){
if(a[i][j] == 'C'){
count++;
}
}
sum += (count*(count-1)/2);
}
for(i=0; i<n; i++){
for(j=0,count=0; j<n; j++){
if(a[j][i] == 'C'){
count++;
}
}
sum += (count*(count-1)/2);
}
printf("%d\n",sum);
}
return 0;
}
B.Far Relative’s Problem
solution
给出每个男的或女的都哪些天能去,那就用循环和数组算出每天都有几个男的和女的能去。比如第一天2个男的能去man[1]=2,一个女的能去wom[1]=1。但要求一男一女搭配才算两个人都能去。那就找每一天,能去的男的人数和能去的女的人数较小的那个数,再乘以2(男女)。一年365天,再找能去人数最多的一天。
AC_Code
#include<stdio.h>
int main()
{
int n;
while(~scanf("%d",&n))
{
getchar();
int man[370]={0},wom[370]={0};
int x,y;
char sex[3];
for(int i=0; i<n; i++)
{
scanf("%s %d %d",sex,&x,&y);
if(sex[0] == 'M'){
for(int j=x; j<=y; j++){
man[j]++;
}
}
else{
for(int j=x; j<=y; j++){
wom[j]++;
}
}
}
int Max = 0;
for(int i=0; i<=370; i++){
int max = 0;
if(man[i]>wom[i])
max = 2*wom[i];
else
max = 2*man[i];
if(max>Max)
Max = max;
}
printf("%d\n",Max);
}
return 0;
}
D - Joysticks
solution
两个人同时打游戏,但电不多了,只有一个充电器。每分钟耗电2%,充电加1%。求坚持的最长时间,应该让电少的充电,电多的耗电。*至少一个手机电量大于2%。
AC_Code
#include<stdio.h>
int main()
{
int a,b;
while(~scanf("%d %d",&a,&b))
{
int time = 0;
while(a && b)
{
if(a>=2 || b>=2)
{
if(a>=b){
b++;
a-=2;
time++;
}
else{
a++;
b-=2;
time++;
}
}
else
break;
}
printf("%d\n",time);
}
return 0;
}
E - Beautiful Paintings
solution
先将数据从小到大排列,比当前值大的就站进去,和当前值一样大的就存入一个新的容器。max是数字重复的最大次数。升序次数为n-max。
#include<stdio.h>
int main()
{
int n;
while(~scanf("%d",&n))
{
getchar();
int a[1001],b[1001];
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
for(int i=1; i<n; i++)
{
for(int j=i+1; j<=n; j++)
{
if(a[i]>a[j]){
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
int max=1;
int k=1;
int q=1;
for(int i=1; i<n;)
{
for(int j=i+1; j<=n; j++)
{
if(a[i] == a[j]){
k++;
}
}
b[q++] = k;
i = i+k;
k = 1;
}
for(int i=1;;i++)
{
if(b[i] == 0)
break;
if(max<b[i])
max = b[i];
}
printf("%d\n",n-max);
}
}