2987: Earthquake
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 238 Solved: 134
[Submit][Status][Discuss]
Description
给定a,b,c,求满足方程Ax+By<=C的非负整数解
A,B<=10^9.C<=Min(A,B)*10^9
Input
Output
Sample Input
3 4 13
Sample Output
12
裸题,不过这是个贴着纵坐标轴的三角形,需要转换一下
具体看代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<string>
#include<math.h>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
#define LL long long
#define mod 1000000007
LL F(LL a, LL b, LL c, LL n)
{
LL sum;
if(a==0)
return n*(b/c);
if(b>=c || a>=c)
{
sum = (1+n)*n/2;
return F(a%c, b%c, c, n)+sum*(a/c)+(n+1)*(b/c);
}
sum = (n*a+b)/c;
return n*sum-F(c, c-b-1, a, sum-1);
}
int main(void)
{
LL a, b, c;
scanf("%lld%lld%lld", &a, &b, &c);
printf("%lld\n", c/a+1+F(a, c%a, b, c/a));
return 0;
}