2019年暑假集训第四套题

问题 C: 放盘子

题目描述

陈老师邀请你玩一个游戏,如果你赢了,你可以得到陈老师的一套精选套题 
游戏是这样的:有一张桌子, 还有无限多的圆形盘子, 陈老师和你两个人轮流放盘子(陈老师先放) 两人都以最优方式放盘子(想办法让对方输), 谁会先把盘子放出桌子范围谁输(盘子可以和桌子边缘相切,但是不能超过桌子边缘) 
现在问你每次游戏你赢了还是输了。 

输入

输入文件为“plate.in” 
输入为一行三个整数,a, b, r, 分别表示桌子的长、宽和盘子的半径 

输出

输出文件为“plate.out” 
输出为一行,如果你赢了,输出win,输了输出lose 

样例输入

6 7 4

样例输出

win

对于100%的数据,1 ≤ abr ≤ 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;
    }
}
发布了43 篇原创文章 · 获赞 12 · 访问量 3654

猜你喜欢

转载自blog.csdn.net/xzerui/article/details/96372579