// 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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)