社区讨论

仅 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 个月前
查看原帖
代码如下。
CPP
long 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 条回复,欢迎继续交流。

正在加载回复...