补题报告之S班暑训第六场
成绩
比赛经过
赛后补题+分析
A 求和计算
简要/形式化题意
输入若干个数,求和。
题解
AC code
#include<bits/stdc++.h>
#define int long long
using namespace std;
int x,sum;
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while(cin>>x) {
if(!x) {
cout<<sum;
break;
}
sum+=x;
}
return 0;
}
B 划分
简要/形式化题意
将一个序列分成若干区间,要求区间和不降,求所有区间和的平方的和的最小值。
题解
区间划分问题
这个显然是
显然的,由数学归纳法不难证明分的段数越多越好。我们跳出
显然的这是
考虑到空间问题,我们不用存储
最后是高精度,要用
AC code
#include<bits/stdc++.h>
using namespace std;
const int N=4e7+10;
const int M=1e5+10;
const int mod=1<<30;
int n,type;
int x,y,z,m,val,p[M],l[M],r[M];
long long sum[N],b[N];
int h,t,q[N],opt_dec[N];
__int128 ans,delta;
void print(__int128 x) {
if(x>9) print(x/10);
putchar(x%10+'0');
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>type;
if(!type) {
for(int i=1;i<=n;i++) cin>>x,sum[i]=sum[i-1]+x;
}
else {
cin>>x>>y>>z>>b[1]>>b[2]>>m;
for(int i=1;i<=m;i++) cin>>p[i]>>l[i]>>r[i];
for(int i=3;i<=n;i++) b[i]=(x*b[i-1]+y*b[i-2]+z)%mod;
for(int i=1;i<=m;i++)
for(int j=p[i-1]+1;j<=p[i];j++) sum[j]=sum[j-1]+b[j]%(r[i]-l[i]+1)+l[i];
}
h=t=1;
for(int i=1;i<=n;i++) {
while(h<t&&2*sum[q[h+1]]-sum[opt_dec[q[h+1]]]<=sum[i]) h++;
opt_dec[i]=q[h];
while(h<t&&2*sum[q[t]]-sum[opt_dec[q[t]]]>=2*sum[i]-sum[opt_dec[i]]) t--;
q[++t]=i;
}
int dec=n;
ans=0;
while(dec) {
delta=(__int128)(sum[dec]-sum[opt_dec[dec]]);
delta=delta*delta;
ans=ans+delta;
dec=opt_dec[dec];
}
print(ans);
return 0;
}
C 序列统计
简要/形式化题意
统计长度在
题解
设
的正整数向量
AC code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e6+3;
const int N=1e6+3;
int t,n,l,r,fact[N],inv[N];
void init() {
fact[0]=inv[0]=1;
fact[1]=inv[1]=1;
for(int i=2;i<N;i++) {
fact[i]=fact[i-1]*i%mod;
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
}
}
int C(int n,int m,int p) {
if(n<m) return 0;
return fact[n]*inv[fact[m]]%p*inv[fact[n-m]]%p;
}
int Lucas(int n,int m,int p) {
if(!m) return 1;
return Lucas(n/p,m/p,p)*C(n%p,m%p,p)%p;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
init();
while(t--) {
cin>>n>>l>>r;
cout<<(Lucas(r-l+1+n,n,mod)-1+mod)%mod<<endl;
}
return 0;
}
D 最小等式
简要/形式化题意
求 |
题解
暴力打
AC code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int a,b,c,d;
int ans[N],cnt;
void work(double x) {
if(x==(int)(x)) ans[++cnt]=abs(x);
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>a>>b>>c>>d;
work(a+b+c+d);
work(a+b+c-d);
work(a+b+c*d);
work(a+b+c*1.0/d);
work(a+b-c+d);
work(a+b-c-d);
work(a+b-c*d);
work(a+b-c*1.0/d);
work(a+b*c+d);
work(a+b*c-d);
work(a+b*c*d);
work(a+b*c*1.0/d);
work(a+b*1.0/c+d);
work(a+b*1.0/c-d);
work(a+b*1.0/c*d);
work(a+b*1.0/c*1.0/d);
work(a-b+c+d);
work(a-b+c-d);
work(a-b+c*d);
work(a-b+c*1.0/d);
work(a-b-c+d);
work(a-b-c-d);
work(a-b-c*d);
work(a-b-c*1.0/d);
work(a-b*c+d);
work(a-b*c-d);
work(a-b*c*d);
work(a-b*c*1.0/d);
work(a-b*1.0/c+d);
work(a-b*1.0/c-d);
work(a-b*1.0/c*d);
work(a-b*1.0/c*1.0/d);
work(a*b+c+d);
work(a*b+c-d);
work(a*b+c*d);
work(a*b+c*1.0/d);
work(a*b-c+d);
work(a*b-c-d);
work(a*b-c*d);
work(a*b-c*1.0/d);
work(a*b*c+d);
work(a*b*c-d);
work(a*b*c*d);
work(a*b*c*1.0/d);
work(a*b*1.0/c+d);
work(a*b*1.0/c-d);
work(a*b*1.0/c*d);
work(a*b*1.0/c*1.0/d);
work(a*1.0/b+c+d);
work(a*1.0/b+c-d);
work(a*1.0/b+c*d);
work(a*1.0/b+c*1.0/d);
work(a*1.0/b-c+d);
work(a*1.0/b-c-d);
work(a*1.0/b-c*d);
work(a*1.0/b-c*1.0/d);
work(a*1.0/b*c+d);
work(a*1.0/b*c-d);
work(a*1.0/b*c*d);
work(a*1.0/b*c*1.0/d);
work(a*1.0/b*1.0/c+d);
work(a*1.0/b*1.0/c-d);
work(a*1.0/b*1.0/c*d);
work(a*1.0/b*1.0/c*1.0/d);
sort(ans+1,ans+cnt+1);
cout<<ans[1];
return 0;
}
考后反思
希望
结尾
这场比赛感觉有点没质量啊(
本文作者:2021hych
本文链接:https://www.cnblogs.com/2021hych/p/17649640.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步