1 条题解

  • 0
    @ 2025-1-19 11:48:06

    死因:求答案是 n2n^2 的(

    //t3 rp++
    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    
    const int N=2e5+10;
    bool f[N];
    int n,cnt,xsum,sch[N];
    vector<int>vc[N],s[N];
    struct Student{int a,b;}a[N];
    
    bool cmp(Student x,Student y)
    {
    	return x.a>y.a; 
    }
    
    int Max(int a,int b)
    {
    	return (a>b?a:b);
    }
    
    signed main()
    {
    	scanf("%lld",&n);
    	for(int i=1;i<=n;++i)
    	{
    		scanf("%lld",&a[i].b);
    		if(f[a[i].b]==0)
    		{
    			f[a[i].b]=1;
    			sch[++cnt]=a[i].b;
    		}
    	}
    	for(int i=1;i<=n;++i)
    	{
    		scanf("%lld",&a[i].a);
    	}
    	sort(a+1,a+n+1,cmp);
    	for(int i=1;i<=n;++i)
    	{
    		vc[a[i].b].push_back(a[i].a);
    	}
    	
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=0;j<vc[i].size();++j)
    		{
    			if(j>0)s[i].push_back(s[i][j-1]+vc[i][j]);
    			else s[i].push_back(vc[i][j]);
    		}
    		xsum=Max(xsum,vc[i].size());
    	}
    	for(int i=1;i<=n;++i)
    	{
    		if(i>xsum)
    		{
    			printf("0 ");
    			continue;
    		}
    		int ans=0;
    		for(int j=1;j<=cnt;++j)//attend
    		{
    			int id=sch[j];
    			int sz=vc[id].size();
    			if(sz-sz%i-1>=0)
    			{
    				ans+=s[id][sz-sz%i-1];
    			}
    		}
    		printf("%lld ",ans);
    	}
    	return 0;
    }
    

    信息

    ID
    2342
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    137
    已通过
    16
    上传者