3 条题解

  • 3
    @ 2026-5-23 16:59:32
    #include <bits/stdc++.h>
    #define int long long
    const int N = 2e5 + 10;
    const int INF = 0x3f3f3f3f;
    using namespace std;
    int t , lenc , s [N] , ans [N] , f [N];
    struct node
    {
    	int id , p;
    }a [N];
    bool cmp (node a1 , node a2)
    {
    	if (a1.id == a2.id) return a1.p > a2.p;
    	return a1.id < a2.id;
    }
    signed main()
    {
    		cin >> t;
    		for (int i = 1; i <= t; i++)
    		{
    			scanf ("%lld" , &a [i].id);
    			if (!s [a [i].id]) lenc++;
    			s [a [i].id]++;	
    		}	 
    		for (int i = 1; i <= t; i++) scanf ("%lld" , &a [i].p);
    		sort (a + 1 , a + t + 1 , cmp);
    //		for (int i = 1; i <= t; i++) cout << a [i].id << " ";
    //		cout << "\n";
    //		for (int i = 1; i <= t; i++) cout << a [i].p << " ";
    //		cout << lenc << "\n";
    		int len = 1;
    		for (int i = 1; i <= lenc; i++)
    		{
    			f [len] = a [len].p;
    			for (int j = len + 1; j <= len + s [a [len].id]; j++)
    				f [j] = f [j - 1] + a [j].p;
    			len += s [a [len].id];
    		}
    		len = 1;
    		while ( lenc-- )
    		{
    			for (int j = 1; j <= s [a [len].id]; j++) //1-n
    			{
    				int t = s [a [len].id] % j;
    				ans [j] += f [len + s [a [len].id] - t - 1];
    			}
    			len += s [a [len].id];
    		}
    		for (int i = 1; i <= t; i++) cout << ans [i] << " ";
    		return 0;
    }
    
    
    • 1
      @ 2026-5-23 17:14:18
      #include <bits/stdc++.h>
      using namespace std;
      int n,u[1145141],s[1145141];
      vector<int> g[1145141];
      long long ans[1145141];
      int main(){
      	cin >> n;
      	for(int i = 1 ; i <= n ; i++) cin >> u[i];
      	for(int i = 1 ; i <= n ; i++) cin >> s[i];
      	for(int i = 1 ; i <= n ; i++) g[u[i]].push_back(s[i]);
      	for(int i = 1 ; i <= n ; i++) sort(g[i].rbegin(),g[i].rend());
      	for(int i = 1 ; i <= n ; i++){
      		if(g[i].empty()) continue;
      		sort(g[i].begin(),g[i].end(),greater<int>());
      		int c = g[i].size();
      		vector<long long> pre(c+1,0);
      		for(int j = 0 ; j < c ; j++) pre[j+1] = pre[j] + g[i][j];
      		for(int j = 1 ; j <= c ; j++){
      			int t = c / j;
      			ans[j] += pre[t * j];
      		}
      	}
      	for(int i = 1 ; i <= n ; i++) printf("%lld%c",ans[i],i == n ? '\n' : ' ');
      	return 0;
      }
      
      • -2
        @ 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;
        }
        
        • 1

        信息

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