LOJ P10012 Best Cow Fences 题解
每日一题 day48 打卡
Analysis
二分答案,判断序列的平均值是否大于等于mid
具体怎么实现呢?
将序列减去mid,再用前缀和来维护平均值就好了
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define int long long 6 #define maxn 100000+10 7 #define INF 2147483647 8 #define rep(i,s,e) for(register int i=s;i<=e;++i) 9 #define dwn(i,s,e) for(register int i=s;i>=e;--i) 10 using namespace std; 11 inline int read() 12 { 13 int x=0,f=1; 14 char c=getchar(); 15 while(c<'0'||c>'9') {if(c=='-') f=-1; c=getchar();} 16 while(c>='0'&&c<='9') {x=x*10+c-'0'; c=getchar();} 17 return f*x; 18 } 19 inline void write(int x) 20 { 21 if(x<0) {putchar('-'); x=-x;} 22 if(x>9) write(x/10); 23 putchar(x%10+'0'); 24 } 25 26 int n,L,l,r,ans; 27 int a[maxn],sum[maxn],b[maxn]; 28 inline bool check(int x) 29 { 30 rep(i,1,n) b[i]=a[i]; 31 rep(i,1,n) b[i]-=x; 32 rep(i,1,n) sum[i]=sum[i-1]+b[i]; 33 int min_val=INF; 34 rep(i,L,n) 35 { 36 min_val=min(min_val,sum[i-L]); 37 if(sum[i]-min_val>=0) return true; 38 } 39 return false; 40 } 41 signed main() 42 { 43 n=read();L=read(); 44 rep(i,1,n) 45 { 46 a[i]=read(); 47 a[i]*=1000; 48 } 49 l=0,r=100000000; 50 while(l<r) 51 { 52 int mid=(l+r+1)/2; 53 if(check(mid)==true) 54 { 55 ans=mid; 56 l=mid; 57 } 58 else r=mid-1; 59 } 60 if(ans%10==9) write(ans+1); 61 else write(ans); 62 return 0; 63 }
请各位大佬斧正(反正我不认识斧正是什么意思)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~