効果:指定された長さN- $ $ $ A $配列、互いに異なる元素、トリプル$(x、y、z)の数を見つける $ 満たすペアワイズ物質またはペアワイズ互いに素を。
その後、不正3員環は、2つの角部が正当な3員環フリップフロップている必要があり、互いに素一つでも白側であれば、偶数黒枠互いに素なし。不法計算検討同じ色の3つの角度であります、アングル数限りはハルモニアすることができます。
書式#include <iostreamの> 書式#include <sstream提供> 書式#include <アルゴリズム> 書式#include <cstdioを> 書式#include <cmath> 書式#include <設定> 書式#include <マップ> 書式#include <キュー> 書式#include <文字列> 書式#include <CStringの> 書式#include <ビットセット> 書式#include <機能> 書式#include <ランダム> #define REP(I、N)のための(iは= int型、iが<= N; I ++) ( - I; I> = A I = N INT)のためのPER(I、n)を#defineします #define人事のputchar(10) #define PB一back #define LC(O << 1) #define RC(LC | 1) #define半ば((L + R)>> 1) #defineのls LC、L、ミッド #define RSのRC、ミッド+ 1、R #define X最初 #define Y秒 #define IOのstd ::イオス:: sync_with_stdio(偽) #defineてendl '\ n' は #define DB(A)({REP(__ I、1、n)はCOUT << [__ I] << '';時間;}) 名前空間stdを使用。 typedefの長い長いLL。 typedefのペア<int型、int型> PII。 CONST int型P = 1E9 + 7、INF = 0x3f3f3f3f。 LLのGCD(-1,11,11- b)は{戻りB GCD(B、%のB):;} {LLのR = 1%のP(LL N、LL)qpow LL;のため(%= P; N; = *%P、N >> = 1)(&N 1)であれば、R = R *% P;戻りR;} LL INV(LL X){?X <= 1を返す:INV(P%以下のX)*(PP / X)%のP;} インラインint型RD(){int型のx = 0;チャーP = GETCHAR();一方、(P < '0' || P> '9')p = GETCHAR();一方、(P> = '0' && P <= '9')、X = X * 10 + P-'0' 、P = GETCHAR();戻りX;} //頭 CONST int型N = 1E5 + 10。 N INT、[n]は、S [N] VIS [N]。 int型P [100]、CNT。 RET LL; ボイドDFS(INT D、INT NUM、INT Z){ IF(D> CNT)RET + = Z * [NUM]です。 他のDFS(D + 1、NUM、z)は、DFS(D + 1、num個の*はP [D] - Z)。 } LL(INT X){解きます CNT = 0; (Xは、%I == 0)場合、{(;私は= xを<* ++ iは2 = INT)のために P [++ CNT] = I。 一方、(X%のI == 0)は、x / = I。 } (X> 1)のp [++ CNT] = xであれば、 K = 0、DFS(1,1,1)。 右を返します。 } ボイドの仕事(){ scanf関数( "%のD"、&N); REP(I、1、N)のscanf( "%dの"、A + I)、VIS [I] = 1。 REP(I、1、N-1){ S [I] = 0; 用(int型J = I; J <N; J + = I)S [I] + = VIS [J]。 } LL ANS = 0。 REP(I、1、N){ IF([I]!= 1){ LL Aは=([i])と、B = NA-1を解きます。 年+ = A * B; } VIS [I] = 0; } printf( "%LLDする\ n"、(LL)N *(N-1)*(N-2)/ 6-ANS / 2)。 } {int型のmain() int型のトン。 scanf関数( "%のD"、&T)。 一方、(t--)ワーク(); }