3 条题解
-
3
#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
#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
死因:求答案是 的(
//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
- 上传者