问题 C: 放盘子
题目描述
陈老师邀请你玩一个游戏,如果你赢了,你可以得到陈老师的一套精选套题
游戏是这样的:有一张桌子, 还有无限多的圆形盘子, 陈老师和你两个人轮流放盘子(陈老师先放) 两人都以最优方式放盘子(想办法让对方输), 谁会先把盘子放出桌子范围谁输(盘子可以和桌子边缘相切,但是不能超过桌子边缘)
现在问你每次游戏你赢了还是输了。
输入
输入文件为“plate.in”
输入为一行三个整数,a, b, r, 分别表示桌子的长、宽和盘子的半径
输出
输出文件为“plate.out”
输出为一行,如果你赢了,输出win,输了输出lose
样例输入
6 7 4
样例输出
win
对于100%的数据,1 ≤ a, b, r ≤ 100
这题乍一看,就是一道博弈论的题目。
而先手是有必胜策略的:先在桌子中心摆一个盘子,无论后手怎么摆,都跟后手对称地摆就行了
这样就稳赢了!!!
但是要考虑两个特殊情况:
- 盘子的面积大于桌子的面积,
虽然现实生活中不大可能。 - 盘子的直径大于桌子的长或者高,
虽然现实生活中不大可能。
贴上AC代码
#include <bits/stdc++.h>
using namespace std;
double pai=3.1415926;
int a,b,r;
int main()
{
//freopen("plate.in","r",stdin);
//freopen("piate.out","w",stdout);
scanf("%d%d%d",&a,&b,&r);
double area=pai*r*r*1.0;
if(area>a*b||r*2>a||r*2>b)printf("win\n");
else cout<<"lose"<<endl;
return 0;
}
问题 A: 王子救公主
题目描述
公主被巫婆抓走,王子为拯救公主需要过n个关,第一关有m个敌人,除第一关每一关都比前一关多d个敌人,王子想知道要打败多少个敌人才可以拯救公主。
输入
第一行1个整数T,表示有T组。(T<=10)
每组测试数据一行三个正整数 n,m,d。(n,m,d<=1000)
输出
每组输出王子要打败的敌人数,每组占一行。
样例输入
1
3 1 1
样例输出
6
题解:这题是浙江理工大学新生赛的签到题,等差数列求和即可。
代码:
#include<iostream>
using namespace std;
int main()
{
int m,d,n,sum,t;
cin>>t;
while(t--)
{
cin>>n>>m>>d;
sum=m;
int temp=m;
for(int i=1;i<=n-1;i++)
{
temp=temp+d;
sum+=temp;
}
cout<<sum<<endl;
}
}