D. 统计区间

#include<bits/stdc++.h>
using namespace std;
long long a[200001],sum[200001],num=0,n,k;
map<long long,long long>s;
int main(){
	freopen("tjqj.in","r",stdin);
	freopen("tjqj.out","w",stdout);
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum[i]=sum[i-1]+a[i];		
	}	
	s[0]++;
	for(int i=1;i<=n;i++){
		if(s[sum[i]-k]>0){
			num+=s[sum[i]-k];
		}
		s[sum[i]]++;
	}
	cout<<num;
	return 0;
}

本题考查对前缀和的应用,错误点在没有对本题了解透彻,对map函数使用不熟练,对数据大小没有了解,以后最好把int换成long long,map函数需要多加练习

E. 旅行

#include<bits/stdc++.h>
using namespace std;
long long sum=0,a,b,n,m,sum1=0;
bool c[2001]={false};
vector<vector<long long> > s(2001);
void bfs(int q){
	if(c[q]){
		return;
	}
	sum1++;
	c[q]=true;
	long long num=s[q].size();
	for(int i=0;i<num;i++){
		bfs(s[q][i]);
	}
	return;
}
int main(){
	freopen("lx.in","r",stdin);
	freopen("lx.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>a>>b;
		s[a].push_back(b); 
	}
	for(int i=1;i<=n;i++){
		bfs(i);
		sum+=sum1;
		sum1=0;
		memset(c,false,n+1);
	}
	cout<<sum;
	return 0;
}

需要使用bfs或者使用dfs,本题使用bfs,错误点没有使用bfs和对题的思路不清晰以及对vector使用仍需练习 num的定义一定需要放在bfs函数内

F. 我讨厌非整数

#include<bits/stdc++.h>
using namespace std;
const int M=998244353;
long long n,a[101],f[101][101][101],sum=0;
int main(){
	freopen("hate.in","r",stdin);
	freopen("hate.out","w",stdout);
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	for(int k=1;k<=n;k++){
		memset(f,0,sizeof f);
		f[0][0][0]=1;
		for(int i=0;i<n;i++){
			for(int j=0;j<=k;j++){
				for(int l=0;l<k;l++){
					f[i+1][j][l]=(f[i+1][j][l]+f[i][j][l])%M;
					if(j<k){
						int ll=(l+a[i])%k;
						f[i+1][j+1][ll]=(f[i+1][j+1][ll]+f[i][j][l])%M;
					}
				}
			}
		}
		sum=(sum+f[n][k][0])%M;
	}
	cout<<sum;
	return 0;
}

考察dp,错误点在第四个循环没有理解透彻,转换方程

重点考察:map函数,前缀和,bfs,dfs,dp

重点学习:bfs,dfs,map函数,dp