打卡信奥刷题(3408)用C++实现信奥题 P10090 [ROIR 2022] 幼儿园的新年 (Day 2)
·
P10090 [ROIR 2022] 幼儿园的新年 (Day 2)
题目背景
翻译简化自 ROIR 2022 D2T1。
题目描述
给出三个整数 n , a , b n,a,b n,a,b,求有多少对 ( x , y ) (x,y) (x,y) 满足 0 ≤ x ≤ a 0 \le x \le a 0≤x≤a, 0 ≤ y ≤ b 0 \le y \le b 0≤y≤b, x + y x+y x+y 不为 0 0 0 且能被 n n n 整除。
输入格式
本题多测,第一行输入一个整数 t t t,表示测试数据的组数。
接下来的 t t t 行,每行输入一组测试数据 n , a , b n,a,b n,a,b,由空格隔开。
输出格式
对于每组数据,输出一行一个数字,即符合条件的 ( x , y ) (x,y) (x,y) 数量。
输入输出样例 #1
输入 #1
4
4 2 2
4 4 4
6 5 5
8 13 17
输出 #1
1
6
5
30
说明/提示
本题使用捆绑测试。
| 子任务 | 分值 | 特殊性质 |
|---|---|---|
| 1 1 1 | 10 10 10 | t = 1 t=1 t=1 且 a , b ≤ 1000 a,b\le1000 a,b≤1000 |
| 2 2 2 | 10 10 10 | t ≤ 1000 t\le1000 t≤1000 且 a = 0 a=0 a=0 |
| 3 3 3 | 15 15 15 | t ≤ 1000 t\le1000 t≤1000 且 a , b < n ≤ 1000 a,b<n\le1000 a,b<n≤1000 |
| 4 4 4 | 10 10 10 | t ≤ 1000 t\le1000 t≤1000 且 a , b ≤ 1000 a,b\le1000 a,b≤1000 |
| 5 5 5 | 15 15 15 | t = 1 t=1 t=1 且 n ≤ 1000 n\le1000 n≤1000 |
| 6 6 6 | 10 10 10 | t ≤ 1000 t\le1000 t≤1000 且 n ≤ 1000 n\le1000 n≤1000 |
| 7 7 7 | 30 30 30 | 无特殊性质 |
对于 100 % 100\% 100% 的数据, 1 ≤ t ≤ 10 5 1 \le t \le 10^5 1≤t≤105, 4 ≤ n ≤ 10 9 4 \le n \le 10^9 4≤n≤109, 0 ≤ a , b ≤ 10 9 0 \le a, b \le 10^9 0≤a,b≤109。
C++实现
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long t;
cin>>t;
while(t--)
{
long long n, a, b;
cin>>n>>a>>b;
if(a>b)swap(a,b);
long long l1=a/n,l2=b/n;
long long sum=0;
sum+=(n+1+n+1+l1*n-n)*l1/2;
sum+=(a+1)*(l2-l1);
long long now=l2*n+n;
long long cnt=a+b-now+1;
if(cnt>0)
{
long long ans=cnt/n;
sum+=(cnt+cnt-ans*n)*(ans+1)/2;
}
cout<<sum<<endl;
}
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
更多推荐
所有评论(0)