题解:AT_nyc2015_11 チーム戦

· · 题解

第一眼看数据范围 3 \le n \le 1000,超小范围,加上 4s 超长限时,暴力秒了!

CODE:

#include<bits/stdc++.h>
using namespace std;
inline int C(n)
{
    return (n*(n-1)*(n-2)/6);
}
int main()
{
    int n;
    cin>>n;
    cout<<C(n)<<"\n";
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    for(int k=1;j<=n;j++)
    {
        if(i!=j&&i!=k&&j!=k)
        cout<<i<<" "<<j<<" "<<k<<"\n";
    }
    return 0;
}

其实也可以用 \text{dfs}

Second Code:

#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int k=3,a,r[4];
int n;
void print()
{
    for(int i=1;i<=k;i++)
        printf("%d ",r[i]);
    cout<<"\n";
}
int ans(int g)
{
    return (g*(g-1)*(g-2)/6);
}
void dfs(int top)
{
    if(top>k)
    {print();a++;return;}
    for(int i=r[top-1]+1;i<=n;i++)
    {
        r[top]=i;
        dfs(top+1);
    }
}
int main()
{
    cin>>n;
    cout<<ans(n)<<"\n";
    dfs(1);
    return 0;
}