Problem A
喵呜语言是一门很深奥的语言,但是,每门语言都是有规律的,当喵呜们发“喵呜”的时候,往往都是“喵”字重音,“呜”字轻音,而在喵呜语言的书写上,由于要突出重音和轻音(不然很有可能被理解为“呜喵”),重音用大写字母表示,轻音用小写字母表示,而且一个字母表示一个音,因此可以认为大写小写是交替出现的,例如:How are you!,翻译成喵呜语言后变成了:HoW aRe YoU!,其中第一个字母永远是重音,而空格和符号都要保留,现在给一句话,请将其翻译成喵呜语言。
输入:
输入一行,一句话(不超过100个字符,可能包含空格,英文标点符号和大小写英文字母)
输出:
一句话,转换成喵呜语言后的话
样例输入:
How are you!
样例输出:
HoW aRe YoU!
字符串,判断各位是否为大小写字母,根据位数操作
#include <stdio.h>
#include <string.h>
int main()
{
char s[101];
//freopen("a.in","r",stdin);
//freopen("b.out","w",stdout);
while(gets(s))
{
int l=strlen(s);
int tag=0;
for(int i=0;i<l;i++)
{
tag++;
if(tag%2==1)
{
if(s[i]<='z'&&s[i]>='a')
printf("%c",s[i]-'a'+'A');
else
printf("%c",s[i]);
}
else
{
if(s[i]>='A'&&s[i]<='Z')
printf("%c",s[i]-'A'+'a');
else
printf("%c",s[i]);
}
}
printf("\n");
}
return 0;
}
Problem B
在喵呜镇有个古老的故事,传说以前有五只喵呜在平分圆柱体的蛋糕,要求只准用三刀,结果有只自认为聪明的喵呜用了两刀将蛋糕分成了四分,第三刀砍死了一只喵呜……
流传到现在,已经演变成了著名的“喵呜问题”(友情提醒:“喵呜问题”不是那么容易解出的…):给出有多少只喵呜平分圆柱体蛋糕(每只喵呜一块,每块要一模一样)和切多少刀(可以横着切和纵着切,或者砍死喵呜,但不能少切),问最少需要砍死多少只喵呜?
输入:
两个数,m,n表示喵呜数和刀数,(0<m,n<=100)
输出:
一个数,最少砍死的喵呜数,如果无论怎么切都无法完成任务,输出-1。
样例输入:
5 3
样例输出:
1
由于要平均分成相同的快数,考虑设横着切a刀,竖着切b刀,砍死了c只喵呜,可以列出方程 a+b+c=n 和 (a+1)*2*b+c=m 消去c之后得 m-n=2*a*b-a+b,剩下的我们就可以直接暴力看满足式子 m-n=2*a*b-a+b 和 a+b<=n 和 (a+1)*2*b<=m中 得到(a+b)的最大值之后,用n减去这个就得到砍死喵呜最少的只数。
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
int m,n;
//freopen("b.in","r",stdin);
//freopen("b.out","w",stdout);
while(scanf("%d%d",&m,&n)!=EOF)
{
int ans=0;
for(int i=0;i<=100;i++)
for(int j=0;j<=100;j++)
{
if(2*i*j-i+j==m-n&&i+j<=n&&(i+1)*2*j<=m)
{
ans=max(i+j,ans);
}
}
printf("%d\n",n-ans);
}
return 0;
}
Problem C
喵呜大神最近发现由于喵呜迷上了吃蛋糕,体积一天天变大,这让喵呜大神感到压力倍增,于是喵呜大神决定开展喵呜镇的“阳光长跑”活动,到每个建筑物的时候需要喵呜一声,建筑物上有个仪器能够将喵呜声音记下来,由于每只喵呜的喵呜声是不一样的,因此仪器可以清楚的分辨不同的喵呜,喵呜们一周需要跑两次,每次必须在十五分钟内跑完,不然不算,喵呜可以从任意一个建筑物开始跑,绕一圈后回到起点才算成绩……
为了保证喵呜们的运动量,所以测量跑步路线长度的时候统一按照最短路线,而且必须跑外道!(具体路线如图中箭头所示,也就是从每个圆相切的地方离开并且跑向下一个圆,从下一个圆相切的地方跑到再下一个圆)。现在知道喵呜镇的建筑物都是圆柱体,而且半径都相等,现在给出三个圆柱体的底面圆心的坐标,问测量出来的跑步路线长度是多少?(圆周率pi取3.14)
输入:
输入7个实数,分别表示圆柱体横截面的半径和三个圆柱体横截面圆心的坐标r x1 y1 x2 y2 x3 y3,其中0<r<5,0<=x1,x2,x3,y1,y2,y3<1000
输出:
一个实数,喵呜跑一圈的长度,保留两位小数。
样例输入:
1 0 0 0 1 1 0
样例输出:
9.69
根据数学知识可以知道,这个外围的距离有三段线段和三段圆弧组成,这三段线段就是三个圆心间的距离,而这三段圆弧恰好组成一个圆...#include <cstdio>
#include <cmath>
#include <algorithm>
#define pi 3.14
using namespace std;
struct point
{
double x,y;
};
double dis(point a,point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
point p[3];
int main()
{
//freopen("c.in","r",stdin);
//freopen("c.out","w",stdout);
double r;
while(scanf("%lf%lf%lf%lf%lf%lf%lf",&r,&p[0].x,&p[0].y,&p[1].x,&p[1].y,&p[2].x,&p[2].y)!=EOF)
{
double ans=0;
ans+=dis(p[0],p[1])+dis(p[1],p[2])+dis(p[0],p[2]);
ans+=pi*2*r;
printf("%.2lf\n",ans);
}
return 0;
}
Problem D
话说喵呜镇最近推行节能的活动,从每件小事做起,由于喵呜镇的阳光长跑的声音监测系统很耗电(因为全天开着),因此喵呜大神希望每一周第一个跑的喵呜把系统打开,最后一个跑的喵呜把系统关掉,但是有一天,他发现上周最后一个跑的喵呜没有把系统关掉,因此想找到这只喵呜扑杀掩埋处理(好野蛮……),但是很可惜系统里虽然有每只喵呜跑步结束的时间,但是并没有按照时间排序,显得凌乱不堪,一时之间还真不好找,现在希望你能帮助他找出上周最后一个跑的喵呜的编号。
输入的数据格式为:
第几天 第几小时 第几分钟 第几秒
例如
4 23 59 59
就表示该喵呜第4天第23小时第59分59秒完成的本周阳光长跑活动。
输入:
第一行输入n(0<n<1000),表示n只喵呜
接下来2-n+1行,第i+1行有4个数,表示第i只喵呜在第a(1<=a<=7)天第b(0<=b<=23)小时第c分钟第d(0<=c,d<=59)秒完成本周的阳光长跑活动。
输出:
一个数,喵呜的编号,表示该喵呜本周最后一个完成阳光长跑
样例输入:
2
1 2 3 4
2 3 4 5
样例输出:
2
题目意思就是排序得到最后一只喵呜的编号。。可以用排序做,也可以转化成时间即秒数,在排序比较也行。
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct miao
{
int d,h,m,s,no;
};
miao mi[1001];
bool cmp(miao a,miao b)
{
if(a.d==b.d)
{
if(a.h==b.h)
{
if(a.m==b.m)
{
return a.s<b.s;
}
return a.m<b.m;
}
return a.h<b.h;
}
return a.d<b.d;
}
int main()
{
//freopen("d.in","r",stdin);
//freopen("d.out","w",stdout);
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%d%d%d%d",&mi[i].d,&mi[i].h,&mi[i].m,&mi[i].s);
mi[i].no=i;
}
sort(mi+1,mi+1+n,cmp);
printf("%d\n",mi[n].no);
}
return 0;
}
Problem E
最近魔方又风靡喵呜镇,喵呜镇的喵呜们都有自己的魔方,但是由于喵呜们的习俗,比较喜欢奇数而讨厌偶数,因此市面上出售的魔方都是奇数阶的(显然没有一阶的魔方,喵呜们没有脑残到这个地步……魔方永远是6个面,阶数代表每条棱上有多少个小正方体,具体如图…)。有些喵呜学艺不精或者拥有成百上千阶的魔方,使得他们拼不回来,于是他们想把魔方拆散了重装,但是他们需要知道哪两个颜色是相对的,因此,他们需要根据现在打乱了的魔方来确定相对的颜色,给定魔方的六个面,求哪两个颜色是相对的。
上图是魔方的展开图,按照图示1--6的顺序输入6个矩阵,表示该面的颜色,其中颜色用1--6表示。
输入:
第一行输入一个整数n(保证n为奇数且3<=n<=100)
接下来输入六个n*n的矩阵,对应上面展开图的1--6的面,每个矩阵上的数字代表展开图上每个矩形上的每个小方块的颜色
输出:
按照下列格式输出
1-颜色1对面的颜色
2-颜色2对面的颜色
3-颜色3对面的颜色
4-颜色4对面的颜色
5-颜色5对面的颜色
6-颜色6对面的颜色
样例输入
3
1 1 1
1 1 1
1 1 1
2 2 2
2 2 2
2 2 2
3 3 3
3 3 3
3 3 3
4 4 4
4 4 4
4 4 4
5 5 5
5 5 5
5 5 5
6 6 6
6 6 6
6 6 6
样例输出:
1-6
2-4
3-5
4-2
5-3
6-1
呃。。。由于魔方再怎么摆弄,每个面中心的那个是不变的,所以这题就是忽悠人的。。。
#include <stdio.h>
int a[101][101];
int b[101][101];
int c[101][101];
int d[101][101];
int e[101][101];
int f[101][101];
int main()
{
int n;
//freopen("e.in","r",stdin);
//freopen("e.out","w",stdout);
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&b[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&c[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&d[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&e[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&f[i][j]);
int nn=(n+1)/2;
printf("1-%d\n",f[nn][nn]);
printf("2-%d\n",d[nn][nn]);
printf("3-%d\n",e[nn][nn]);
printf("4-%d\n",b[nn][nn]);
printf("5-%d\n",c[nn][nn]);
printf("6-%d\n",a[nn][nn]);
}
return 0;
}
Problem F
话说最近喵呜镇颇不宁静,由于喵呜的天敌狗狗入侵喵呜镇,导致喵呜镇鸡犬不宁,现在喵呜大神站了出来,要与狗狗打上一架,不过由于小喵呜们看到狗狗就心慌四处逃窜,所以当喵呜大神面对狗狗士兵的时候,他惊讶的发现那些小喵呜们都已经不见了……在这万分危急的时候,喵呜大神只能使用两种绝招了……
绝招A:乾坤喵呜移,可以将一半的狗狗移到海里喂鲨鱼……但是如果狗狗数量为奇数时,使用这个绝招会导致天地阴阳错乱,后果不堪设想,所以喵呜大神不会在狗狗数量为奇数的时候用该绝招。
绝招B:降狗喵呜掌,可以秒杀一只狗狗……
使用绝招A和绝招B都需要耗费一单位的气力,问将狗狗们全部干掉最少需要耗费多少单位的气力?
输入:
一个数,狗狗的个数n(n<10000)
输出
一个数,表示喵呜大神最少耗费多少单位的气力
样例输入:
3
样例输出:
3
3n+1问题。。
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int ans=0;
while(n)
{
if(n&1)
{
n--;
ans++;
}
else
{
ans++;
n/=2;
}
}
printf("%d\n",ans);
}
return 0;
}
Problem G
喵呜镇的房价调控是很诡异的,让人有时候难以理解,而且更诡异的是,房价居然可以变成负数的,orz……
以下是喵呜镇某小区的房价示意图
0 | 3 |
-1 | 5 |
-1 | 2 |
其中的数字表示该房子的房价(万元)。
而房价调控的规则如下,相邻的两间房子(相邻:上下左右)可以同时涨任意多的价格,也可以同时降任意多的价格,例如上面的示意图,两个-1的可以同时涨1万元,而都变成0万元,也可以同时降10万元,变成-11万元……
喵呜大神对这个房价调控政策感到蛋疼,因此他希望重新制定房价调控政策,但是,他希望在实施新调控政策之前(也就是在原有政策下)先将所有房子的房价全部调整到0万元,请问是否存在一种调控方案能将所有房子的房价调整成0万元。
例如上图,两个-1都加1就都为0了,而3和5的两间房子可以同时下降3万元,然后5的那间房子由于下降了3万元,变成了2万元,再和右下角的那间房子同时都下降两万元,就变成0万元了,因此这种房价下有存在方案使得调控后所有房子的房价都为0万元。
输入:
第一行输入两个数m,n(0<m,n<=100),代表小区房子俯视图的行数和列数
接下来m行,每行n个数,表示第m行第n列的房子的房价(每个房子的房价范围为-100~100)
输出:
如果经过某种调控方案后能够达到每个房子的房价均为0,那么输出"Possible",否则输出"Impossible",输出时去掉引号。
样例输入:
3 2
0 3
-1 5
-1 2
样例输出:
Possible
#include <stdio.h>
int main()
{
int s,a;
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
s=0;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
scanf("%d",&a);
if((i+j)&1)
s-=a;
else
s+=a;
}
if(s==0)
printf("Possible\n");
else
printf("Impossible\n");
}
return 0;
}