Arithmetic Operations(CF 1654 E)
题目大意
给你一个序列,问最少的把一个数改成其他任意数的操作数使得这个序列变成一个等差数列。
思路
很容易就能想到把这个问题转化为一个二维平面上求一条直线能经过最多点的问题,但是由于纵坐标会很大,所以不能直接暴力枚举斜率,但是我们又能想到当斜率很大时,肯定不会有很多点被经过,所以对于小斜率我们可以直接暴力枚举,然后对于大斜率,我们两两之间进行枚举,然后就能轻松了。不过至于什么是小斜率,那就设的稍微小一点,~之间都行吧。
代码
#include<bits/stdc++.h> using namespace std; const int t=30; int a[100005]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); int ans=0; for(int i=-t;i<=t;i++) { map<int,int>cnt; for(int j=1;j<=n;j++) ans=max(ans,++cnt[a[j]-i*j]); } for(int i=1;i<=n;i++) { map<int,int>cnt; int r=100000/t; for(int j=i+1;j-i<=r&&j<=n;j++) { int d=a[j]-a[i]; if(d%(j-i))continue; d/=(j-i); ans=max(ans,++cnt[d]+1); } } printf("%d\n",n-ans); return 0; }
__EOF__

本文作者:Jerry-Black
本文链接:https://www.cnblogs.com/Jerry-Black/p/16037922.html
关于博主:小蒟蒻一只( ̄^ ̄)ゞ
版权声明:转载请注明来源哟~ QAQ
声援博主:UP UP UP !!!
本文链接:https://www.cnblogs.com/Jerry-Black/p/16037922.html
关于博主:小蒟蒻一只( ̄^ ̄)ゞ
版权声明:转载请注明来源哟~ QAQ
声援博主:UP UP UP !!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具