C++,codeforces,363B,B. Fence
/* codeforces,363B,B. Fence 找出长度为n的数组中长度为k的连续子数组中和最小的子数组的起始位置 */ /* 维护一个最小值 维护一个长度为k的容器, 储存当前获取的数以及前k-1个数的和 每新获取一个数,将容器中最早获取的数删除,并将新数加入容器 计算和, 如果和小于最小值,更新最小值,并记录最早获取的数的位置 首先获取k个数,并计算和,初始化最小值,初始化答案下标 之后依次获取k-n个数, 每获取一个, 计算和,更新最小值,更新答案下标 */ #include <iostream> #include <vector> int main(){ int n,k;std::cin>>n>>k; if(n<k){ std::cout<<"wrong n<k"<<std::endl; return 0; } std::vector<int> vec(k,0); int ansIndex = 1,min=k*100; int head = 0,currSum=0; for(int i = 0;i<k;++i){ std::cin>>vec[i]; currSum+=vec[i]; } min = currSum; //currIndex = 1 for(int i = 2;i<= (n-k+1);++i){ //i从2开始并到(n-k+1)结束 //是为了方便在更新ansIndex时能直接将i赋值给ansIndex //即将i作为以本次循环获取的数为结尾的子数组的起始位置([1,n-k+1]) currSum-=vec[head]; std::cin>>vec[head]; currSum+=vec[head]; //head=(head+1)%k; //刚开始使用的用上面的方式,来限定head的范围 //后来觉得每次取模比较花时间, 于是改成下面的方式 ++head; if(head==k)head=0; if(currSum<min){ min = currSum; ansIndex = i; } } std::cout<<ansIndex; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现