CFB「div3」

Problema - B - Codeforces

Codeforces Ronda #776 (Div. 3) - Codeforces

Durante la competencia, no pude resolver este problema, al principio pensé en usar dos puntos, pero cuando lo hice más tarde, descubrí que no había ninguna referencia, por lo que no se permitían dos puntos.

Luego comience a hacerlo pensando si no, pero cuando busque el último número más grande, aplique directamente la enumeración "en casos extremos, debe expirar", en lugar de obtener directamente este número

Código CA:

#include <iostream>
#include <cmath>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#define int long long
using namespace std;
const int N = 1e4+10;
int n;
bool st[N];
int l,r,a;


signed main()
{
	scanf("%lld",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld%lld%lld",&l,&r,&a);
		int res=0;
		//两个都考虑
		if(r%a==a-1){
			int val = r / a + r % a;
			cout<<val<<endl;
		}
		else if(l/a==r/a&&l%a<=r%a){
			int val = r / a + r % a;
			cout<<val<<endl;
		}
		//后面才进行比对,分析的时候不能直接用a与l和r的关系
		else if(l/a!=r/a&&l%a<=r%a){
			int val = r / a + r % a;
			val = max(val,a-1ll+r/a-1ll);
			cout<<val<<endl;
		}else{
			int val = r / a + r % a;
			val = max(val,a-1ll+r/a-1ll);
			cout<<val<<endl;
		}
	}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_60789461/article/details/123367669
Recomendado
Clasificación