题面链接
https://ac.nowcoder.com/acm/contest/23106/E
题面不难发现一个事情,就是每个轮回外面的同学都是减少m-1个的,但是最后一个回合就得特殊判断一下,很麻烦,所以我们换一个思维看,先让m个同学进去,然后再考虑需要的时间单位就好了
- 如果n和m相等的话(因为n是大于等于m的)那么花费时间就是1
- 如果不相等且m为1的话,那么校外的同学永远也进不去
- 给当前的花费加上 ⌊ n − m m − 1 ⌋ × 2 \left \lfloor \frac{n-m}{m-1} \right \rfloor \times 2 ⌊m−1n−m⌋×2,因为进去出来时间花费为2嘛,如果有余数的话说明还有不足m个人在外面,那么时间花费再增二就好了
详情请看代码
代码#include
using namespace std;
//----------------�Զ��岿��----------------
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair
int dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};
ll ksm(ll a,ll b) {
ll ans = 1;
for(;b;b>>=1LL) {
if(b & 1) ans = ans * a % mod;
a = a * a % mod;
}
return ans;
}
ll lowbit(ll x){return -x & x;}
const int N = 2e6+10;
//----------------�Զ��岿��----------------
ll n,m,q,a[N];
ll slove(){
if(n == m) return 1;//相等直接返回1就好了,都进去
if(m == 1) return -1;//不能所有人进入
n -= m;//不管三七二十一先进去m个人
ll cnt = n/(m-1);
ll ans = 1;
ans += (n/(m-1LL)) * 2;
if(n % (m-1LL) != 0LL) ans += 2;
return ans;
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
int t;
cin>>t;
while(t--){
cin>>n>>m;
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?