2020.10.26模拟赛
2020.10.25 模拟赛
T1 稻草富翁
先考虑都不等于0的情况,一轮下来,1单位沙子可以变成\(\frac{bdf}{ace}\)单位沙子,如果这个值大于1,那么他就可以制造出无数黄金。
再考虑等于0的情况。我们的目的是兑换黄金,不考虑其他影响,如果d等于0,那么无论有多少铅,都不可能换到黄金,如果d不等于0,c等于0,那么就算没有铅,也可以换到无数黄金。以此类推,再考虑b,a,f,e。按照顺序一个一个判断。
#include<bits/stdc++.h>
using namespace std;
int t,a,b,c,d,e,f;
int main(){
cin>>t;
while(t--){
scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
if(d==0){printf("FON\n");continue;}
if(c==0){printf("MEI\n");continue;}
if(b==0){printf("FON\n");continue;}
if(a==0){printf("MEI\n");continue;}
if(a*c*e<b*d*f){printf("MEI\n");continue;}
printf("FON\n");
}
return 0;
}
T2 序列
考虑处理出每一个操作被执行的次数。可以从后往前扫,用差分数组维护(我比较愚笨,只想得起树状数组)。再用另一个差分维护每一个点的数值。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5,mod=1e9+7;;
struct node{
int t,l,r,o;
}a[N];
int n,m,c[N],d[N];
void add(int x,int y){
y%=mod;
for(int i=x;i<=m;i+=i&-i)c[i]=(c[i]+y+mod)%mod;
}
int getsum(int x){
int sum=0;
for(int i=x;i>=1;i-=i&-i){sum=(sum+c[i]+mod)%mod;}
return sum;
}
void jia(int x,int y){
for(int i=x;i<=n;i+=i&-i)d[i]=(d[i]+y+mod)%mod;
}
int qiuhe(int x){
int sum=0;
for(int i=x;i>=1;i-=i&-i){sum=(sum+d[i]+mod)%mod;}
return sum;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int t,l,r;
scanf("%lld%lld%lld",&a[i].o,&a[i].l,&a[i].r);
}
add(1,1);
for(int i=m;i>=1;i--){
if(a[i].o==2){
int x=getsum(i);
add(a[i].l,x);
add(a[i].r+1,-x);
}
if(a[i].o==1){
int x=getsum(i);
jia(a[i].l,x);
jia(a[i].r+1,-x);
}
}
for(int i=1;i<=n;i++){
printf("%lld ",qiuhe(i));
}
return 0;
}
总结
非常开心,虽然只是拿到了比较好拿而且没什么区分度的240分,不过居然拿到了小机房rk1!(不是并列)
其实有很多大佬比我强,但是T1需要仔细地判0的情况,许多大佬疏忽了,只拿了70分。结果因为我不会T3,花了更多时间思考T1,有了意外的收获。
这件事情生动形象地告诉了我们,如果遇见了不会做的题,要花时间检查前面的题而不是花大量的时间思考不会的题,有时简单题的细节会造成很大的影响。

浙公网安备 33010602011771号