专栏文章
题解:P14477 图寻中国
P14477题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min81w2s
- 此快照首次捕获于
- 2025/12/01 22:05 3 个月前
- 此快照最后确认于
- 2025/12/01 22:05 3 个月前
P14477图寻中国 题解
本水题可以推公式
题意重述
给出一连串对局的总局数 ,再给出对局中最长连胜 和最长连败 ,求符合以上条件的最大胜利数。
思路分析
虽然题目要求胜利尽可能多,但为了不超过最大连胜局数,必须要在胜利 局后立刻输一局来分割连胜。就有两种情况:
- 如果最长连败为 (也就是 ),则分隔直接使用 局失败即可,共重复 个胜 局,败 局的周期。若 ,即还有剩余局数没有比完,则使其全胜利即可,因为可以证明 。
- 如果最长连败非 (也就是 ),则可以先将 局胜利和 局失败比掉,新增一个变量 (即剩余的局数),剩下的按照 的情况处理即可,最后别忘了加上一开始连胜的 。
根据上面的分析,可以得出两种情况所对应的公式:
第一种情况: 即 组乘以每组连胜数加剩余的连胜局数。
第二种情况: 即组数乘每组连胜数加上剩余胜利数加上一开始连胜的a。
代码
CPP#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,a,b;
cin>>n>>a>>b;
if(b==0){//判断是否b=0,若是则按第一种情况处理
int c=n/(a+1);
int x=c*a;
cout<<x+n%(a+1);//此处为了方便阅读将第一种情况的公式拆成三段,意义和结果不变
}
else{ //否则按第二种情况处理
int c=n-a-b;
int x=c/(a+1);
cout<<x*a+a+c%(a+1);//此处为了方便阅读将第二种情况的公式拆成三段,意义和结果不变
}
return 0;//The End and AC!
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...