P9703 「TFOI R1」Average Number 题解
题目大意
已知
解题思路
其实这道题并不难,主要是分类讨论比较麻烦,大体思路如下:
一:当 为 的时候, 为整数。
- 当
能够整除 时,有 整除 。此时,当 等于 时, ,当 时, ,显然, 比 更优,所以,我们优先考虑取 。解出后带入原式,判断 是否小于等于 且大于等于 ,如果不满足条件,那么就取 并求解。 - 当
不能够整除 时,那么 ,此时 , ,没有 优,舍去。
二:当 不为 。
- 当
, ,同样,算完后带入检验,如果不满足条件,直接舍去。 - 当
, ,算完后检验。 - 当
, ,计算后带入检验
综上所述,总共分为两大类五小类讨论,按照
AC代码
#include<bits/stdc++.h>
#define ull usigned long long
using namespace std;
const string TypideName="c";
inline void readc(char &c){
c=getchar();
while(c==' '||c=='\n')
c=getchar();
}inline void writec(char c){putchar(c);}
template<typename T>inline void read(T& x) {
if(typeid(x).name()==TypideName){char ch;readc(ch);x=ch;return;}
x = 0; bool f = false; char ch = getchar();
while (ch < '0' || ch>'9') { if (ch == '-') f = !f; ch = getchar(); }
while (ch >= '0' && ch <= '9') { x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar(); }
x = (f ? -x : x); return;
}template<typename T>inline void put(T x) {
if (x < 0) putchar('-'), x = -x;
if (x > 9) put(x / 10);
putchar(x % 10 + '0'); return;
}template<typename T>inline void write(T x) {
if(typeid(x).name()==TypideName){writec(x);return;}
put(x);
}
template<typename T,typename... Args>
inline void read(T& x,Args&...x_) {read(x),read(x_...);}
template<typename T,typename... Args>
inline void write(T x,Args...x_){write(x),write(x_...);}
inline void read(__int128 &x){
x = 0; bool f = false; char ch = getchar();
while (ch < '0' || ch>'9') { if (ch == '-') f = !f; ch = getchar(); }
while (ch >= '0' && ch <= '9') { x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar(); }
x = (f ? -x : x); return;
}inline void put(__int128 x){
if (x < 0) putchar('-'), x = -x;
if (x > 9) put(x / 10);
putchar(x % 10 + '0'); return;
}inline void write(__int128 x){put(x),putchar(' ');return;}
#define ll __int128
inline ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
ll a,b,c,n,m;
inline void work(){
read(a),read(b),read(c);
if(b==0){
n=(a<<1)-2,m=1;
if(m<1||m>n){
n=(a<<1),m=n;
}
write(n);
write(m);putchar('\n');
return;
}
bool is=true;
n=(a<<1)-1;
if(((c-(b<<1))*n+(b<<1)+c)%(c<<1)!=0) is=false;
if(is){
m=((c-(b<<1))*n+(b<<1)+c)/(c<<1);
if(2*(n-m)<=(n-1)||m<1||m>n) is=false;
if(is){
write(n),write(m);
putchar('\n');return;
}
}is=true;
n=a<<1;
if((b*(n-1))%c!=0) is=false;
if(is){
m=n-b*(n-1)/c;
if(m<1||m>n) is=false;
if(is){
write(n),write(m);
putchar('\n');return;
}
}is=true;
n=(a<<1)+1;
if(((3*c-2*b)*n+2*b-c)%(c<<1)!=0) is=false;
if(is){
m=((3*c-2*b)*n+2*b-c)/(c<<1);
if(2*(n-m)>=(n-1)||m<1||m>n) is=false;
if(is){
write(n);write(m);
putchar('\n');return;
}
}
}
signed main(){
int T;read(T);
while(T--) work();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下