Counting Triangles
#include<iostream>
#include<cstring>
using namespace std;
namespace GenHelper{
unsigned z1,z2,z3,z4,b,u;
unsigned get(){
b=((z1<<6)^z1)>>13;
z1=((z1&4294967294U)<<18)^b;
b=((z2<<2)^z2)>>27;
z2=((z2&4294967288U)<<2)^b;
b=((z3<<13)^z3)>>21;
z3=((z3&4294967280U)<<7)^b;
b=((z4<<3)^z4)>>12;
z4=((z4&4294967168U)<<13)^b;
return (z1^z2^z3^z4);
}
bool read() {
while (!u) u = get();
bool res = u & 1;
u >>= 1; return res;
}
void srand(int x){
z1=x;
z2=(~x)^0x233333333U;
z3=x^0x1234598766U;
z4=(~x)+51;
u = 0;
}
}
using namespace GenHelper;
typedef long long LL;
const int N=8010;
bool edge[N][N];
int main(){
int n,seed;
cin>>n>>seed;
srand(seed);
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
edge[j][i]=edge[i][j]=read();
LL sum=0;
for(int i=0;i<n;i++){
LL tmp=0;
for(int j=0;j<n;j++){
if(i==j) continue;
tmp+=edge[i][j];
}
sum+=tmp*(n-1-tmp);
}
sum/=2;
LL ans=1ll*n*(1ll*n-1)*(1ll*n-2)/6-sum;
cout<<ans;
}24dian
#include<iostream>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
const double eps=1e-5;
int n,m;
double a[4];
bool vis[4];
bool has,tag;
void DFS(int d,bool flag){
if(d==n){
if(fabs(a[0]-m)<eps){
has=true;
if(!flag) tag=true;
return;
}
}
for(int i=0;i<n;i++) if(fabs(floor(a[i])-a[i])>eps) flag=true;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++){
if(vis[i]||vis[j]) continue;
double x=a[i],y=a[j];
vis[j]=true;
a[i]=x+y;DFS(d+1,flag);
a[i]=x-y;DFS(d+1,flag);
a[i]=y-x;DFS(d+1,flag);
a[i]=x*y;DFS(d+1,flag);
if(fabs(y)>eps){
a[i]=x/y;
DFS(d+1,flag);
}
if(fabs(x)>eps){
a[i]=y/x;
DFS(d+1,flag);
}
a[i]=x,a[j]=y;
vis[j]=false;
}
}
struct node{
int a[4];
};
vector<node> v;
void dfs(int d,int lst){
if(d==n){
has=tag=false;
DFS(1,false);
if(has&&!tag) v.push_back({(int)a[0],(int)a[1],(int)a[2],(int)a[3]});
return;
}
for(int i=lst;i<=13;i++){
a[d]=i;
dfs(d+1,i);
}
}
int main(){
scanf("%d%d",&n,&m);
dfs(0,1);
printf("%d\n",v.size());
for(int i=0;i<v.size();i++){
for(int j=0;j<n;j++) printf("%d ",v[i].a[j]);
puts("");
}
}
京公网安备 11010502036488号