自测比赛

本文介绍了牛客网7月算法比赛的部分题目,涉及字符串处理、博弈论、概率计算、数论、二分查找、递归、搜索算法等多个方面。每个题目包括题目描述、输入输出描述、示例、解题思路和AC代码,适合算法爱好者参考和练习。
摘要由CSDN通过智能技术生成

题目 来源 牛客网 7月赛

A

题目描述

​ 做水题就是在浪费时间,但是一场比赛要是没有送分的签到题,大家的比赛体验就会很差。为了优化你的比赛体验又不浪费你的读题时间,我并不打算给你很复杂的故事背景,你只需要复制下面的代码并选择正确的语言提交即可通过此题。

#include<iostream>
using namespace std;
long long f(long long n)
{
    if (n < 20180001) return n + 2017;
    return f(f(n - 2018));
}
int main()
{
    long long n;
    cin >> n;
    cout << f(n) << endl;
    return 0;
}

输入描述

输入一个整数n。(1 ≤ n ≤ 10^18)

输出描述

输出一个整数表示答案。

示例1

输入
20182017
输出
20182017
解题思路

暴力多试几组数据可以发现:当n<=20180000时,f(n)=n+2017;否则f(n)恒等于20182017。

AC代码
 #include<iostream>
  using namespace std;
  typedef long long LL;LL n;
  int main(){
      while(cin>>n){
          if(n<20180001)cout<<n+2017<<endl;
          else cout<<20182017<<endl;
      }
      return 0;
 }

B

题目描述

Alice和Bob产生了不可调节的矛盾,于是他们相约一起玩一个自杀游戏,输的人就会从这个世界上消失。

游戏开始时,Alice手上拿着一个定时炸弹,炸弹有个倒计时t。炸弹在t=0时刻会爆炸,此时手上拿着炸弹的人会从这个世界上消失。为了增加游戏乐趣,他们约定每个人拿到炸弹后可以选择将炸弹的时间调快d秒(d ∈ [a,b]),或者不调。每次交换炸弹会消耗1秒(假设调节炸弹时间不需要消耗时间)。

问题来了,如果双方都足够聪明,谁会活下去呢?

输入描述

第一行有三个整数t,a,b,分别表示炸弹初始时刻的倒计时,可调节时间的范围。(0 ≤ t ≤ 105,1 ≤ a ≤ b ≤ 10)

输出描述

若Alice存活则输出"Alice",若Bob存活则输出"Bob"。

示例1

输入
6 3 4
输出
Alice
说明
Alice只需要将炸弹调快3秒后再给Bob,Bob就会拿到一个2秒后爆炸的炸弹。

解题思路

将必胜态和必败态的转移用 DP 递推或者记忆化搜索出来即可。 一个必败态的后继状态全部是必胜态,一个必胜态的后继存在比败态。

AC代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;

const int maxn = 1e5+5;
 
int n,m,t,k,a,b; 
int f[maxn];
 
int main(){
 while(cin>>t>>a>>b){
  memset(f,0,sizeof(f));
  for(int i=1;i<=t;i++){
   if(f[i-1]==0) f[i]=1;
   else{
    for(int j=max(0,i-b-1);j<=max(-1,i-a-1);j++){// 这里wa几发 边界orz
     if(f[j]==0){// i-a-1 小于0 不能成0结束 而是不访问
      f[i]=1;
      break;
     }
    }
   }
  }
  if(f[t]) cout<<"Alice\n";
  else cout<<"Bob\n";
 }
    return 0;
}

C

题目描述

有一天,MWH突然来了兴致,想和CSL比比谁枪法好。于是他们找来了一个瓶子,比比看谁先打中这个瓶子。 给定MWH的命中率α%\alpha%α%和CSL的命中率β%\beta%β%。 两人轮流射击,MWH先手,问谁获胜的概率大?

输入描述:

输入两个整数α\alphaα和β\betaβ,表示MWH和CSL的命中率。(0≤α,β≤100)(0 \leq \alpha,\beta \leq 100)(0≤α,β≤100).

输出描述:

若MWH获胜的概率大,则输出"MWH"。 若CSL获胜的概率大,则输出"CSL",否则输出"equal"。

示例1

输入
100 100
输出
MWH

示例2

输入
0 100
输出
CSL

解题思路

简单说一下:如果先手第n场赢,那么前n-1场的概率如图所示,累加所有情况的概率即可(有点坑,比赛时多乘了一个后手失败的概率,导致一直WA,QAQ=_=||);如果后手第n场赢,那么最后要多乘上一个先手失败的概率,再累加所有情况的概率即可。同时还要注意,如果n0&&m!=0,那么先手必败;如果n100,m无论为何值,先手必赢;如果n0&&m0,那么两者赢的概率肯定相等。</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值