CSP-J复赛模拟补题报告
2023.10.6星期five
1.比赛情况
T1(repeat):100
T2(multiplication):100
T3(summation):50
T4(point)0
2.比赛过程
T1大概10分钟就做完了,想到那个思路就直接猛猛写。就是在b和a是空串的输入方面想了想不过最后也说了没有size()=0的情况。
T2没看见数字最大99,把a,b分离数位一位一位加的,不过貌似多次一举了。。。
T3直接去找规律,演样例发现没问题了就去试了试大数据,结果输出的和数据不一样,后来发现我桶标记的时候写的是++。考后发现越界了,也是桶标记数组越界需要用map优化,并且取余还写错地方了。
T4白兰地
3.题解报告
1.重复判断repeat
1.题意
2.题解
先判断下a是否是b长度上的倍数,不是就NO了,是的话让b自增a.size()/b.size()倍(需要新变量)
然后判断是否跟a相同。
3.AC码
#include<iostream>
using namespace std;
int main(){
// freopen("repeat.in","r",stdin);
// freopen("repeat.out","w",stdout);
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
long long t;
cin>>t;
for(int i=1;i<=t;i++){
string a,b;
cin>>a>>b;
if(b.size()==0&&a.size()!=0){
cout<<"NO"<<endl;
continue;
}
if(a.size()%b.size()!=0){
cout<<"NO"<<endl;
continue;
}
string sum="";
for(int i=1;i<=a.size()/b.size();i++){
sum+=b;
}
if(sum==a){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
return 0;
}
2.歪果仁学乘法multiplication
1.题意
2.题解
乍一看挺唬人的,其实本质就是仅有两位数的数位相加。将每个的个位和十位都乘了求和。
3.AC码
#include<iostream>
using namespace std;
int main(){
freopen("multiplication.out","w",stdout);
freopen("multiplication.in","r",stdin);
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int c[3],a,b,ans=0,sum=0;
cin>>a>>b;
while(a!=0){
sum++;
c[sum]=a%10;
a/=10;
}
while(b!=0){
for(int i=1;i<=sum;i++){
ans+=c[i]*(b%10);
}
b/=10;
}
cout<<ans;
}
3.去重求和summation
1.题意
2.题解
因为数据范围很大,所以我们需要想写优化策略。
尝试观察序列a,b,c,d,e。
sum中a出现了(5-1)*1次,b(4-1)*2,c(3-1)*3....
所以a[i]所加的值就是a[i]*(n-i+1)*i。
如果出现重复的,需要将上次出现的a[i]到开头所加的所有a[i]的值删掉
重复遍历i,将每一位都加好后就AK了。
注意判断重复所用的数组需要用map优化,不然就像我一样爆了。
3.AC码
#include<iostream>
#include<map>
using namespace std;
long long n,a[500500],ans;
const int N = 1e9+7;
map<long long,int>f;
int main(){
// freopen("summation.in","r",stdin);
// freopen("summation.out","w",stdout);
cin>>n;
for(long long i=1;i<=n;i++){
cin>>a[i];
if(f[a[i]]==0){
ans+=(a[i]*(n-i+1)%N*i)%N;
f[a[i]]=i;
}
else{
ans+=(a[i]*(n-i+1)%N*i)%N;
ans-=((n-i+1)*f[a[i]]%N*a[i])%N;
f[a[i]]=i;
}
}
cout<<ans%N;
return 0;
}
4.点集操作point
不会做QWQ
五天比赛总结
总分810,全班第一鸭!!!
有许多用法都没有搞明白,第四题基本纯骗分,除此之外还是很不错低(嘻嘻)