社区讨论
仅 WA 了仅一个最小数据求调
P14029【MX-X20-T3】「FAOI-R7」重排序列(update)参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhj0k9gl
- 此快照首次捕获于
- 2025/11/03 18:45 4 个月前
- 此快照最后确认于
- 2025/11/03 18:45 4 个月前
代码如下。
CPPlong long t , n , m;
pair < long long , long long > a[200005] , b[200005];
bool cmp(pair < long long , long long > a , pair < long long , long long > b)
{
return a.second < b.second;
}
bool cmpm(pair < long long , long long > a , pair < long long , long long > b)
{
return a.first % m < b.first % m;
}
long long ans[200005];
bool vis[200005];
void solve()
{
memset(vis , 0 , sizeof(vis));
read(n , m);
for(int i = 1 ; i <= n ; i++)
{
read(a[i].first);
a[i].second = i;
}
for(int i = 1 ; i <= n ; i++)
{
read(b[i].first);
b[i].second = i;
}
sort(a + 1 , a + n + 1 , cmpm);
sort(b + 1 , b + n + 1 , cmpm);
int i = 1 , j = n;
for( ; i <= n && j >= 1 ; i++)
{
while(a[i].first % m + b[j].first % m >= m && j >= 1)
{
j--;
}
if(j >= 1)
{
vis[j] = 1;
ans[a[i].second] = b[j].first;
j--;
}
}
for(j = 1 ; i <= n ; i++)
{
while(vis[j] && j <= n)
{
j++;
}
ans[a[i].second] = b[j].first;
vis[j] = 1;
j++;
}
long long S = 0;
for(int i = 1 ; i <= n ; i++)
{
S += (a[i].first + ans[a[i].second]) % m;
}
printnl(S);
printarray(ans , 1 , n , ' ');
print("\n");
}
signed main()
{
read(t);
while(t--)
{
solve();
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...