bzoj2987&luogu5171 Earthquake

Posted encodetalker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj2987&luogu5171 Earthquake相关的知识,希望对你有一定的参考价值。

题目链接:luogu5171

这玩意在bzoj上是个权限题

统计\\(ax+by\\leq c\\)的非负正整数解,考虑将原式变形成\\(y\\leq\\frac-ax+cb\\)

我们枚举\\(x\\)可以得到最后的答案就是\\(\\sum_x=0^\\lfloor\\fracca\\rfloor(\\frac-ax+bb+1)=\\sum_x=0^\\lfloor\\fracca\\rfloor\\frac-ax+b+cb\\)

直接令\\(A=-a,B=b+c,C=b,N=\\lfloor\\fracca\\rfloor\\),跑类欧即可

类欧可以参见:https://www.cnblogs.com/encodetalker/p/11037506.html

#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<math.h>
#include<queue>
#include<set>
#include<map>
using namespace std;
typedef long long ll;
#define lowbit(x) (x)&(-x)
#define sqr(x) (x)*(x)
#define rep(i,a,b) for (register int i=a;i<=b;i++)
#define per(i,a,b) for (register int i=a;i>=b;i--)
#define fir first
#define sec second
#define mp(a,b) make_pair(a,b)
#define pb(a) push_back(a)
#define maxd 998244353
#define eps 1e-8
ll a,b,c;
ll read()

    ll x=0;int f=1;char ch=getchar();
    while ((ch<'0') || (ch>'9')) if (ch=='-') f=-1;ch=getchar();
    while ((ch>='0') && (ch<='9')) x=x*10+(ch-'0');ch=getchar();
    return x*f;


ll gcd(ll x,ll y)

    if ((!x) || (!y)) return x+y;
    return gcd(y,x%y);


ll work(ll a,ll b,ll c,ll n)

    if (!a) return (n+1)*(b/c);
    if (!n) return b/c;
    if (n==1) return (a+b)/c+b/c;
    if (c<0) return work(-a,-b,-c,n);
    ll d=abs(gcd(gcd(a,b),c));
    a/=d;b/=d;c/=d;
    if ((a>=c) || (b>=c)) return work(a%c,b%c,c,n)+n*(n+1)/2*(a/c)+(n+1)*(b/c);
    if ((a<0) || (b<0)) return work(a%c+c,b%c+c,c,n)+n*(n+1)/2*(a/c-1)+(n+1)*(b/c-1);
    ll m=(a*n+b)/c;
    return n*m-work(c,c-b-1,a,m-1);


int main()

    a=read();b=read();c=read();
    printf("%lld",work(-a,b+c,b,c/a));
    return 0;

以上是关于bzoj2987&luogu5171 Earthquake的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 1002 && Luogu 2144 [FJOI 2007] 轮状病毒

luogu 3565 bzoj 3522 & bzoj 4543

Luogu 3810 & BZOJ 3262 陌上花开/三维偏序 | CDQ分治

bzoj4094 && luogu3097 最优挤奶

Bzoj-2002&&Luogu-3203&CodeVS-2333

bzoj1455&&luogu2713罗马游戏