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; }