第37次ccf csp认证总结

目前博主还没获得真题,现将代码分享出来

博主能力有限,只获得了290分的成绩

第一题依照题意模拟就行

#include<bits/stdc++.h>
using namespace std;
int main(){
long long b,c,l,r,sum=0;
cin>>b>>c>>l>>r;
for(long long i=l;i<=r;i++){
	if(i%2==0){
		sum+=i*i+b*i+c;
	}
}
cout<<2*sum;	
	return 0;
}

第二题(完全背包)

#include<bits/stdc++.h>
using namespace std;
long long dp[10005],m,a,n;
int main(){
cin>>n>>m;
for(int v=1;v<=m;v++)
{
	cin>>a;
	for(int i=v;i<=n;i++){
		dp[i]=max(dp[i],dp[i-v]+a);
	}
}	
cout<<dp[n];
	return 0;
}

第三题(字符串模拟,1,3操作比较好实现)

#include<bits/stdc++.h>
using namespace std;
map<string,long long>arr;
const long long num=1000000007;
int main(){
long long n,x,sum;
string a,b,temp;
cin>>n;
while(n){
	cin>>x;
	if(x==1){
		cin>>a;
		sum=0;
		temp="";
		getline(cin,b);
		b=b+" ";
		for(int i=1;i<b.length();i++){
			if(b[i]==' '){
				if(temp[0]=='$'){
					temp.erase(0,1);
					sum+=arr[temp];
				}
				else{
					sum+=temp.length();
				}
				temp="";
			}
			else{
				temp=temp+b[i];
			}
		}
		arr[a]=sum%num;
	}
	else if(x==3){
		cin>>a;
		cout<<arr[a]%num<<endl;
	}
	n--;
}
	return 0;
} 

第四题(暴力拿了30分)

#include<bits/stdc++.h>
using namespace std;
const long long num=998244353;
long long n,arr[1000005],now,ans=0,flag=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
	cin>>arr[i];
	if(i==1) flag=arr[i];
	else flag=__gcd(flag,arr[i]);
} 
for(int i=1;i<=n;i++) arr[i]/=flag;
for(int i=1;i<=n;i++){
	now=arr[i];
	int j;
	for(j=i;j<=n;j++){
		now=__gcd(now,arr[j]);
		ans+=i*j*now%num;
		//cout<<i*j*now%num<<" ";
		ans%=num;
		if(now==1) break;
	}
	if(now==1&&j<n){
		ans+=(n+j+1)*(n-j)/2*i%num;
	}
	ans%=num;
}
cout<<ans*flag%num;	
	return 0;
}
/*
5
10 2 6 6 8
20
7 6 5 5 17 18 13 3 11 12 7 9 16 15 5 19 20 13 14 6
*/

总结:

1.这次简单题很简单,难题很难。前两题13分钟都做了出来,在第四题上卡了差不多两个小时,在第一次提交时2,3数据点显示输出错误,以为数据不强没有超时,所以一直在调,后发现是取模操作有问题,交上去喜提超时。第三题1,3操作很简单,20分钟就拿了60分。

2.第四题好像要用线段树+二分,第四题貌似是树形dp,这些博主都不会。

路漫漫其修远兮,吾将上下而求索

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值