注意规律,每2n项是一个循环,经历2n次之后就会回到初始状态
ac代码
#include<bits/stdc++.h>
using namespace std;
typedef struct sm{
int x;
int y;
}mms;
const int N=1e5+10;
int cnt[N];
int n,k,m;
int main()
{
int t;
cin>>t;
while(t--)
{
mms ans[N];
memset(cnt,0,sizeof(cnt));
cin>>n>>k>>m;
for(int i=0;i<n;i++)
cin>>ans[i].x,ans[i].y=0;
if(m>=2*n){
for(int i=0;i<2*n;i++)
{
int a=i%n;
if(cnt[ans[a].x]==0)cnt[ans[a].x]++;
else
{
cnt[ans[a].x]--;
ans[a].y++;
}
}
for(int i=0;i<n;i++)
ans[i].y*=(m/(2*n));
}
for(int i=0;i<m%(2*n);i++)
{
int a=i%n;
if(cnt[ans[a].x]==0)cnt[ans[a].x]++;
else
{
cnt[ans[a].x]--;
ans[a].y++;
}
}
for(int i=0;i<n;i++)
{
if(i)cout<<" ";
cout<<ans[i].y;
}
cout<<endl;
}
return 0;
}