竞赛
考级
代码特点:内存少、时间少。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 题目解析及及解法描述 本题难度普及-,正版解法应为差分。但是,因题目测试点问题,只需输出111即可AC。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 参考C++代码: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 这题数据太水了吧!
#include <bits/stdc++.h> using namespace std; int a[1000005],d[1000005]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; d[i]=a[i]-a[i-1]; } int l,r,c; for(int i=1;i<=m;i++){ cin>>l>>r>>c; d[l]+=c; d[r+1]-=c; } for(int i=1;i<=n;i++){ a[i]=d[i]+a[i-1]; } int s=200; for(int i=1;i<=n;i++){ if(a[i]<s)s=a[i]; } cout<<s; return 0; }
用最简单的方法
#include<bits/stdc++.h> using namespace std; int d[5000001]; int a[5000001]; int main() { int n,p,x,y,z,i,min=1e9; cin>>n>>p; for(i=1;i<=n;i++) { cin>>a[i]; } }
#include<bits/stdc++.h> using namespace std; int main(){ int n,p; int a[5000005],d[5000005]; cin>>n>>p; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ d[i]=a[i]-a[i-1]; } while(p--){ int x,y,z; cin>>x>>y>>z; d[x]+=z; d[y+1]-=z; } for(int i=1;i<=n;i++){ a[i]=a[i-1]+d[i]; } int min=110; for(int i=1;i<=n;i++){ if(a[i]<min)min=a[i]; } cout<<min; return 0; }
#include <bits/stdc++.h> using namespace std; long long s[10000001]; int n,x[1000001],m,l,r,y,c;//创建变量 int main(){ cin>>n>>m;//输入变量 for(int i=1;i<=n;i++){//输入数组 cin>>x[i]; } for(int i=1;i<=n;i++){//差分 s[i]=x[i]-x[i-1]; } for(int i=1;i<=m;i++){//差分数组只需要修改第l项和第r+1项。 cin>>l>>r>>c; s[l]+=c; s[r+1]-=c; } for(int i=1;i<=n;i++){//前缀和 x[i]=s[i]+x[i-1]; } sort(x+1,x+n+1);//排序从小到大 cout<<x[1];//输出数组 return 0; }
代码如下:
#include<bits/stdc++.h> using namespace std; int a[1000005],d[1000005]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; d[i]=a[i]-a[i-1]; } int l,r,c; for(int i=1;i<=m;i++){ cin>>l>>r>>c; d[l]+=c; d[r+1]-=c; } int x=101; for(int i=1;i<=n;i++){ a[i]=a[i-1]+d[i]; x = min(a[i],x); } cout<<x; return 0; }
提交答案之后,这里将显示提交结果~