7.28考总
:
分析可以知道,每一种颜色肯定的珍珠数量肯定不会超过n/2,所以以n/2作为分界点,让i与i+n/2去拼就肯定不会重复。
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int maxn=1e6+5;
int n,m,ans[maxn],a[maxn];
signed main(){
cin.tie(0),cout.tie(0);
cin>>n>>m;
int cnt=0;
for(int i=1;i<=m;i++){
cin>>a[i];
while(a[i]--){
ans[++cnt]=i;
}
}
for(int i=1;i<=n/2;i++){
cout<<ans[i]<<" "<<ans[i+n/2]<<endl;
}
return 0;
}
T5
用背包的思路去做,方程为:
sum实际上是一个前缀和数组,表示载i头奶牛过河的时间,但是还需要加上两个m,即来回一次的时间,最后减去一个m,因为最后一次不用划回去。
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int maxn=3e5+5;
int n,sum[maxn],a[maxn],dp[maxn];
signed main(){
memset(dp,0x3f,sizeof(dp));
cin>>n>>sum[0];
dp[0]=0;
sum[0]+=sum[0];
for(int i=1;i<=n;i++){
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++){
dp[i]=min(dp[i],dp[j]+sum[i-j]);
}
}
cout<<dp[n]-sum[0]/2<<endl;
return 0;
}
T6
采用差分思想,因为需要的本来就是差分数组,先跑出一遍求出初始值。每次更改时只需要删去左端点与右端点+1的位置的影响,然后改变差分值,再加上影响即可。
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int maxn=2e6+5;
int a[maxn],d[maxn],m,n,s,t,sum[maxn];
int cal(int x){
return x>0?-s*x:-t*x;
}
signed main(){
cin.tie(0),cout.tie(0);
cin>>n>>m>>s>>t;
int ahah=0,haha;
int ans=0;
for(int i=0;i<=n;i++){
cin>>haha;
d[i]=haha-ahah;
ahah=haha;
ans+=cal(d[i]);
}
while(m--){
int x,y,z;
cin>>x>>y>>z;
ans-=cal(d[x]);
d[x]+=z;
ans+=cal(d[x]);
if(y!=n){
ans-=cal(d[y+1]);
d[y+1]-=z;
ans+=cal(d[y+1]);
}
cout<<ans<<endl;
}
return 0;
}
本人(KK_SpongeBob)蒟蒻,写不出好文章,但转载请注明原文链接:https://www.cnblogs.com/OIer-QAQ/p/18575271
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期