3 条题解

  • 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;
    }
    

    信息

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