您当前的位置: 首页 > 

MangataTS

暂无认证

  • 0浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

炸鸡块君的高中回忆(思维)

MangataTS 发布时间:2022-01-27 19:32:54 ,浏览量:0

题面链接

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            
关注
打赏
1665836431
查看更多评论
0.0601s