2020 camp-day-6-F

反证:对于一个角,如果两边为不同色,则组成的三角形必定不符要求,则统计每个顶点的黑白边数,二者相乘即为此顶点不合要求的角,

对于一个不合要求的三角形,存在两个不合要求的角,

统计所有顶点组出来不合要求的角的和,除以二就是不合要求三角形

#include <cstdio>

#define RE register
#define FOR(i,a,b) for(RE int i=a;i<=b;++i)
#define ROF(i,a,b) for(RE int i=a;i>=b;--i)
#define sc(n) scanf("%lld",&n)
#define ll long long

using namespace std;

ll a, b, c, d, p, ans, n;
int mp[5005][2];

inline bool check(int i, int j)
{
    return ((i + j) * (i + j) * a % p + (i - j) * (i - j) * b % p + c) % p > d;
}

int main()
{
    sc(n),sc(a), sc(b), sc(c), sc(p), sc(d);
    FOR(i, 1, n)FOR(j, i + 1, n)if (check(i, j)) ++mp[i][1], ++mp[j][1]; else ++mp[i][0], ++mp[j][0];
    FOR(i, 1, n)ans +=  mp[i][0] * mp[i][1];
    printf("%lld", 1ll * n * (n - 1) * (n - 2) / 6 - ans / 2);
    return 0;
}

  

原文地址:https://www.cnblogs.com/2aptx4869/p/12216717.html