当前位置: 首页 > news >正文

P10311 Weighted Mean Sol

题目链接

一道有些复杂的构造。

不妨设加权平均数为 \(\lambda\)。通过代换,就有了 \(\sum\limits_{i=1}^n b_i \cdot (a_i - \lambda) = 0\)。因此现在变成尝试构造 \(\lambda\)

显然的,排序对于答案的构造没有影响,因此下文中,数组默认有序。同时,记 \(c_i = a_i - \lambda\)

n为奇数

最为简单的情况。考虑直接取中位数为 \(\lambda\),则显然的,我们可以对称的让两项为 \(0\),这里不再赘述。

而对于中间位置,直接取到 \(m\),正确性显然。

n为偶数

这里又有分讨。定义 \(L = a[n/2],R = a[n/2+1]\)

L \(\ne\) R-1

那么考虑取 \(\lambda\)\(L+1\),显然上述构造成立。

L = R-1

本题最复杂的情况。

我们如果考虑取 \(\lambda = L\),然后删除 \(R\),并让 \(c_n + 1\)。那么这样又能构造了。但是会出现三个位置相同的情况。

我们需要证明,只要 \(n\) 不为 2,答案一定存在。考虑什么情况下不合法,显然是 \(c_1,c_n\) 产生了对应,那么只要重新取 \(\lambda = R\),就一定正确了。

而对于 \(n=2\) 不合法,证明是显然的。

Code

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define File(s) freopen(s".in","r",stdin);freopen(s".out","w",stdout)
#define LL long long
#define fi first
#define se second
const int N = 1e6 + 10;
struct node{int val,id;
};
bool cmp(node x,node y){return x.val < y.val;
}
node a[N];
int b[N];
int tmp[N];
int n,m;
unordered_map<int,int> mp;
int ans[N];
void print(){for(int i=1;i<=n;i++)cout << ans[i] << " ";cout << "\n";
}
void solve(){cin >> n >> m;for(int i=1;i<=n;i++){cin >> a[i].val;a[i].id = i;}sort(a+1,a+1+n,cmp);if(n & 1){int k = ((n+1) / 2);b[k] = m;int c = a[k].val;for(int i=1;i<=n;i++)a[i].val -= c;for(int i=1;i<=n;i++)b[i] = a[i].val;b[k] = m;reverse(b+1,b+1+n);for(int i=1;i<=n;i++)ans[a[i].id] = abs(b[i]);print();return ;}else{int L,R;L = n/2,R = L + 1;if(n ==2  && a[L].val == a[R].val-1){cout << -1 << "\n";return ;}if(a[L].val == a[R].val-1){vector<int> c(n,0);vector<bool> vis(n+1,0);int tot = 0;int num = a[L].val;for(int i=1;i<=L;i++){c[++tot] = a[i].val - num;c[tot] = abs(c[tot]);}for(int i=R+1;i<=n;i++)c[++tot] = a[i].val - num;c[tot] ++ ;set<int> st;st.clear();for(int i=1;i<L;i++)st.insert(c[i]);for(int i=L+1;i<=tot;i++)st.erase(c[i]);if(!st.empty()){for(int i=1;i<=n;i++){if(c[i] == (*st.begin())){b[i] = c[tot];b[n/2+1] = b[n] = c[i];vis[i] = vis[n/2+1] = vis[n] = 1;st.clear();break;}}b[n/2] = m;int nw = L+2;for(int i=1;i<n/2;i++){if(vis[nw]) nw ++ ;if(vis[i]) continue;b[nw] = c[i];b[i] = c[nw-1];nw ++ ;}for(int i=1;i<=n;i++)ans[a[i].id] = b[i];print();return ;}reverse(a+1,a+1+n);for(int i=1;i<=n-1;i++)c[i] = 0;for(int i=1;i<=n;i++)vis[i] = 0;tot = 0;num = a[L].val;for(int i=1;i<=L;i++){c[++tot] = a[i].val - num;c[tot] = abs(c[tot]);}for(int i=R+1;i<=n;i++){c[++tot] = a[i].val - num;c[tot] = abs(c[tot]);}c[tot] ++ ;st.clear();for(int i=1;i<L;i++)st.insert(c[i]);for(int i=L+1;i<=tot;i++)st.erase(c[i]);if(!st.empty()){for(int i=1;i<=n;i++){if(c[i] == (*st.begin())){b[i] = c[tot];b[n/2+1] = b[n] = c[i];vis[i] = vis[n/2+1] = vis[n] = 1;st.clear();break;}}b[n/2] = m;int nw = L+2;for(int i=1;i<n/2;i++){if(vis[nw]) nw ++ ;if(vis[i]) continue;b[nw] = c[i];b[i] = c[nw-1];nw ++ ;}for(int i=1;i<=n;i++)ans[a[i].id] = b[i];print();return ;}}else{int c = a[L].val + 1;for(int i=1;i<=n;i++)a[i].val -= c;for(int i=1;i<=n;i++)b[i] = a[i].val;reverse(b+1,b+1+n);for(int i=1;i<=n;i++)ans[a[i].id] = abs(b[i]);print();}}
}
int main(){IOS;int T;cin >> T;while(T -- )solve();return 0;
}

后记

实际上,第一篇题解是有问题的,如果头尾相配,可能会在 \(L = R-1\) 时,出现无法匹配的情况。因此,奇数的情况是不适用的。我们需要的是找出没有重复的 \(c\),然后进行匹配。这样就合法了。

可恶的题解,让我和 ds 和空气肘击半天,最后发现构造方式是有问题的。

http://www.jsqmd.com/news/902146/

相关文章:

  • AMD Ryzen处理器调优神器:SMUDebugTool完全使用指南
  • 2026最新东营市黄金回收白银回收铂金回收店铺实力口碑排行榜TOP5;K金+金条+银条+首饰回收靠谱门店及联系方式推荐 - 前途无量YY
  • GMS1.4 YYC编译的游戏,如何无损提取音效和图片?一个UndertaleModTool的实战教程
  • 别再搞混了!Unity里世界、屏幕、UI坐标转换,一个实战案例全讲清(附避坑代码)
  • Windows 命令提示符(CMD)内容补缺输入输出重定向及管道
  • 别再用通用Prompt写冥想文案!神经语言学家实测:3个微调参数让GPT生成内容通过正念教师资质审核
  • leetcode思路-回溯最后一节(131.分割回文串、51.N皇后)
  • 四平 cppm 培训机构中供国培首选 - 中供国培
  • Keil UVISION打印边距设置问题与解决方案
  • 2026最新达州市黄金回收白银回收铂金回收店铺实力口碑排行榜TOP5;K金+金条+银条+首饰回收靠谱门店及联系方式推荐 - 前途无量YY
  • 2026最新都江堰市黄金回收白银回收铂金回收店铺实力口碑排行榜TOP5;K金+金条+银条+首饰回收靠谱门店及联系方式推荐 - 前途无量YY
  • AI时代技术写作:如何用真实经验打造不可替代的工程师内容
  • TVA 对 CV 的代际超越逻辑(3)
  • 深度解析UEFI固件:3个实战场景教你掌握系统底层调试
  • 2026最新的北京电动车运输公司怎么选?推荐一下 哪家好 - 奔跑123
  • 构建零信任MCP服务器:本地AI工具的安全集成与调度中枢
  • 仿生表情机器人:混合驱动与AI情感交互技术解析
  • 告别复制粘贴!用Keil MDK 5.27为GD32F450搭建专属工程模板(保姆级避坑指南)
  • 2026最新大安市黄金回收白银回收铂金回收店铺实力口碑排行榜TOP5;K金+金条+银条+首饰回收靠谱门店及联系方式推荐 - 前途无量YY
  • 知识流失无法沉淀?“企业文档”如何助力企业形成知识资产结构化管理与复用体系?
  • 如何快速解决编码乱码问题:终极跨平台GBK转UTF-8解决方案
  • AutoBridge:LLM驱动的智能设备自动化集成方案
  • 从‘TypeError: unsupported operand type(s) for -‘说开去:Python类型系统的静默陷阱与防御性编程
  • 从‘找不到设备’到‘Hello DCU’:一次DCU-Z100驱动安装的完整排错记录与心得
  • 2026最新大理市黄金回收白银回收铂金回收店铺实力口碑排行榜TOP5;K金+金条+银条+首饰回收靠谱门店及联系方式推荐 - 前途无量YY
  • 3分钟搞定!手机号逆向查询QQ号的终极免费方案 [特殊字符]
  • 高价回收支付宝红包的秘诀:你需要知道这些平台! - 团团收购物卡回收
  • ARM Compiler 6 LTO功能受限问题解析与优化方案
  • 2026最新敦化市黄金回收白银回收铂金回收店铺实力口碑排行榜TOP5;K金+金条+银条+首饰回收靠谱门店及联系方式推荐 - 前途无量YY
  • 终极Wand增强指南:3步免费解锁专业版,开启游戏修改新体验 [特殊字符]