1 条题解

  • 1
    @ 2025-6-17 10:52:36

    正反则难,我们用总方案数减去共线的,总方案数为 :

    C(nm,3)C(nm,3)

    然后减去水平方向和竖直方向共线的:

    mC(n,3)mC(n,3)nC(m,3)nC(m,3)

    然后再减去斜着共线的,枚举△i、△j

    然后减去:

    2(ni)(mj)(gcd(i,j)1)2(n-△i)(m-△j)(gcd(△i,△j)-1)

    (ni)(mj)(n-△i)(m-△j) 表示第一个点的方案,gcd(i,j)1gcd(△i,△j)-1表示中间能选的点的个数,最后乘 2\texttt{2} 是因为斜率可以是正的也可以是负的。

    
    ```#include<bits/stdc++.h>
    #define int long long
    using namespace std;
    int m,n,t;
    int a[1005][1005];
    bool vis[1005][1005];
    signed main() {
    	cin>>m>>n;
    	t=n*m*(n*m-1)/2*(n*m-2)/3;
    	t-=m*n*(n-1)*(n-2)/6;
    	t-=n*m*(m-1)*(m-2)/6;
    	for(int i=1; i<n; ++i) {
    		for(int j=1; j<m; ++j) {
    			t-=(n-i)*(m-j)*(__gcd(i,j)-1)*2;
    		}
    	}
    	cout<<t<<"\n";
    	return 0;
    }
    • 1

    信息

    ID
    255
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    (无)
    递交数
    27
    已通过
    14
    上传者