7.17作业

复制代码
// 1.数列分段 Section I //用last记录前面总和不小于m的值,如果当前值+last>m,说明last区间的为一组,然后开一个新的组 //时间复杂度o(n) #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; string s; int n,t,a[N],f[N],res,num,ans,m,last=-1; bool vis[N]; signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); // cin>>t; // while(t--){ // } cin>>n>>m; for(int i=0;i<n;i++){ cin>>t; if(last==-1){ last=t; continue; } if(i>=1&&last+t>m) res++,last=t; else if(last+t<=m) last+=t; } cout<<res+1<<endl; return 0; } //2.凌乱的yyy / 线段覆盖 //按区间左端点排序,就是一个区间覆盖问题,和建立雷达类似 #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; string s; int n,t,a[N],f[N],res,num=-1,ans,m; bool vis[N]; struct node { int l,r; bool operator<(const node&w)const { return r<w.r; } }op[N]; signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>n; for(int i=0;i<n;i++) cin>>op[i].l>>op[i].r; sort(op,op+n); for(int i=0;i<n;i++) if(op[i].l>=num) res++,num=op[i].r; cout<<res<<endl; return 0; } //3.合并果子 //每次都合并最小的果子,这样得到的体力值才是最小的,因为你如果先把大的放进去 //之后的操作每次都要加一次,会越来越多 #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; string s; int n,t,a[N],f[N],res,num,ans,m; bool vis[N]; signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); // cin>>t; // while(t--){ // } cin>>n; priority_queue<int,vector<int>,greater<int>>heap; for(int i=0;i<n;i++) cin>>m,heap.push(m); while(heap.size()>1){ int a=heap.top();heap.pop(); int b=heap.top();heap.pop(); res+=(a+b); heap.push(a+b); } res+=heap.top(); cout<<res<<endl; return 0; } //4.排队接水 //用结构体记录序号和需要的接水时间,然后排个序就可以 #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; string s; int n,t,a[N],f[N],res,num,ans,m; bool vis[N]; struct node { int id,shijian; bool operator<(const node&w)const { return shijian<w.shijian; } }p[N]; signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); // cin>>t; // while(t--){ // } cin>>n; for(int i=1;i<=n;i++) cin>>p[i].shijian,p[i].id=i; sort(p+1,p+n+1); double res=0.00; for(int i=1;i<=n;i++) cout<<p[i].id<<" "; cout<<endl; for(int i=1;i<=n;i++) a[i]=a[i-1]+p[i].shijian; for(int i=1;i<=n-1;i++) res+=a[i]; printf("%.2lf",(double)res/n); return 0; } //5.小A的糖果 //模拟 #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; string s; int n,t,a[N],f[N],res,num,ans,m; bool vis[N]; signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; if(i>1&&a[i-1]+a[i]>m) res+=a[i-1]+a[i]-m,a[i]=m-a[i-1]; } cout<<res; return 0; } //6.跳跳! #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; string s; int n,t,a[N],f[N],res,num,ans,m; bool vis[N]; signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a,a+n+1); int st=0,last=n; while(st<last){ res+=(a[last]-a[st])*(a[last]-a[st]); ++st; res+=(a[last]-a[st])*(a[last]-a[st]); --last; } cout<<res; return 0; } //7.陶陶摘苹果(升级版) //只需要排序体力即可 #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; int n,t,a,b,s,res,num,ans,m; bool vis[N]; struct node { int x,y; bool operator<(const node&w)const { return y<w.y; } }p[N]; signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>n>>s>>a>>b; for(int i=0;i<n;i++) cin>>p[i].x>>p[i].y; sort(p,p+n); for(int i=0;i<n;i++){ if(p[i].x<=a+b&&p[i].y<=s) res++,s-=p[i].y; if(s<=0) break; } cout<<res<<endl; return 0; } //8.[USACO1.3] 混合牛奶 Mixing Milk //正常排序就可以做 #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; string s; int n,t,a[N],f[N],res,num,ans,m; bool vis[N]; struct node { int price,l; bool operator<(const node&w)const{ return price<w.price; } }p[N]; signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>m>>n; for(int i=0;i<n;i++) cin>>p[i].price>>p[i].l; sort(p,p+n); for(int i=0;i<n;i++){ if(m>=p[i].l) res+=p[i].price*p[i].l,m-=p[i].l; else if(m>0&&m<p[i].l) res+=p[i].price*m,m=0; if(m<=0) break; } cout<<res; return 0; } //9.选数 //dfs,运用欧拉筛进行筛; //三个状态,现在的位置,现在的总和,现在的次数 #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; string s; int n,t,a[N],f[N],res,num,ans,m,prime[N]; bool vis[N],st[N]; void dfs(int now,int num,int cnt) { if(now>n) return; if(cnt==m){ if(!vis[num]) res++; return; } for(int i=now+1;i<=n;i++) dfs(i,num+a[i],cnt+1); } signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); vis[0]=vis[1]=true; for(int i=2;i<=N;i++){ if(!vis[i]) prime[++num]=i; for(int j=1;prime[j]<=N/i;j++){ vis[prime[j]*i]=true; if(!(i%prime[j])) break; } } cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; dfs(0,0,0); cout<<res<<endl; return 0; } //10.kkksc03考前临时抱佛脚 //暴力搜索,每次选左边或者右边,直到选完 #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; int n,t,a[N],res,num,ans,m,l,r,s[5]; bool vis[N]; void dfs(int now,int i) { if(now>s[i]){ ans=min(ans,max(l,r)); return; } l+=a[now]; dfs(now+1,i),l-=a[now],r+=a[now],dfs(now+1,i),r-=a[now]; } signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>s[1]>>s[2]>>s[3]>>s[4]; for(int i=1;i<=4;i++){ ans=0x3f3f3f,l=0,r=0; for(int j=1;j<=s[i];j++) cin>>a[j]; dfs(1,i); res+=ans; } cout<<res; return 0; } //11.「EZEC-5」修改数组 //所有的1就是答案 #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; string s; int n,t,a[N],res,num,ans,m; bool vis[N]; signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>t; while(t--){ cin>>n; bool f=false; ans=0,res=0,num=0; for(int i=0;i<n;i++){ cin>>a[i]; if(a[i]==1) res++; } cout<<res<<endl; for(int i=0;i<n;i++){ if(a[i]==1) f=true; if(f) cout<<1<<" "; else cout<<0<<" "; } cout<<endl; } return 0; } #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; string s; int n,t,a[N],res,num,ans,m; bool vis[N]; signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>t; while(t--){ cin>>n; bool f=false; ans=0,res=0,num=0; for(int i=0;i<n;i++){ cin>>a[i]; if(a[i]==1) res++; } cout<<res<<endl; for(int i=0;i<n;i++){ if(a[i]==1) f=!f,cout<<1<<" "; if(a[i]==0&&f) cout<<1<<" "; else if(a[i]==0&&!f) cout<<0<<" "; } cout<<endl; } return 0; }
复制代码

 


__EOF__

本文作者Sakurajimamai
本文链接https://www.cnblogs.com/o-Sakurajimamai-o/p/17558625.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   o-Sakurajimamai-o  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
-- --
点击右上角即可分享
微信分享提示