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(""); } }