我这个快读是不是不能直接输入?
为什么我这个选组合输出全是 0?
#include<bits/stdc++.h>
using namespace std;
int ans[40001],aaa[15001],bbb[15001],ccc[15001],ddd[15001];
struct mo{
int zhi,id;
}x[40001];
char buf[1<<21],*p1=buf,*p2=buf;
inline char gc(){
if(p1==p2)
{
p2=(p1=buf)+fread(buf,1,1<<21,stdin);
}
return *(p1++);
}
inline int read(){
int s=0,w=1;
char ch=gc();
while(ch<'0'||ch>'9')
{
if(ch=='-')
{
w*=-1;
}
ch=gc();
}
while(ch>='0'&&ch<='9')
{
s=(s<<1)+(s<<3)+(ch^48);
ch=gc();
}
return s*w;
}
/*void out(){
for(int i=x[1].zhi;i<=x[m].zhi;i++)
{
if(ans[i])
{
cout<<i<<" ";
}
}
cout<<endl;
}*/
void iff(int aa,int bb,int cc,int dd){
if(bb-aa==2*(dd-cc)&&bb-aa<(cc-dd)/3)
{
aaa[x[aa].id]++;
bbb[x[bb].id]++;
ccc[x[cc].id]++;
ddd[x[dd].id]++;
}
}
void com(int step,int c,int nn,int mm){
if(c>4)
{
return ;
}
if(c+(x[mm].zhi-step+1)<4)
{
return ;
}
if(step>x[mm].zhi)
{
//out();
iff(ans[1],ans[2],ans[3],ans[4]);
return ;
}
ans[step]=1;
com(step+1,c+1,nn,mm);
ans[step]=0;
com(step+1,c,nn,mm);
}
bool cmpzhi(mo xx,mo yy){
return xx.zhi<yy.zhi;
}
bool cmpid(mo xxx,mo yyy){
return xxx.id<yyy.id;
}
int main(){
//int n=read(),m=read();
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
//x[i].zhi=read();
cin>>x[i].zhi;
x[i].id=i;
}
sort(x+1,x+m+1,cmpzhi);
com(1,0,n,m);
sort(x+1,x+m+1,cmpid);
for(int i=1;i<=m;i++)
{
cout<<aaa[x[i].id]<<" "<<bbb[x[i].id]<<" "<<ccc[x[i].id]<<" "<<ddd[x[i].id]<<endl;
}
return 0;
}
/*
#include<bits/stdc++.h>
using namespace std;
int ans[20];
int N,M;
void out(){
for (int i=1; i<=N; i++)
if (ans[i])
cout << i <<" ";
cout << endl;
}
void com( int step,int c){
if (c>M) return ;
if (c+(N-step+1) < M ) return ;
if (step>N) {
out();
return ;
}
ans[step]=1;
com(step+1,c+1);
ans[step]=0;
com(step+1,c);
}
int main(){
cin >> N >> M;
com(1,0);
return 0;
}
*/