求助
查看原帖
求助
548568
宙空Starsky楼主2022/7/12 16:25

问题一

我这个快读是不是不能直接输入?

问题二

为什么我这个选组合输出全是 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;

}

*/
2022/7/12 16:25
加载中...