第八次训练课总结

最后更新于 2025-08-02 21:40:40
作者
分类 个人记录

B3653 [语言月赛202208] 俊俏地鼠的远亲

这道题就是让我们求一只地鼠的远亲,所以我们可以用枚举的方法来作,只要判断一下d[i][j]是否等于d[a][b]如果等于那么求(i-a)* (i-a)+(b-j)*(b-j)的最大值。

#include<bits/stdc++.h>
using namespace std;
long long n,m,d[55][55];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>d[i][j];
		}
	}
	for(int i=1;i<=n;i++){//// 枚举每一只地鼠
		for(int j=1;j<=m;j++){
			long long x=0;
			for(int a=1;a<=n;a++){
				for(int b=1;b<=m;b++){
                    if(d[i][j]==d[a][b]{//判断他是否为亲戚
                        long long l=(i-a)*(i-a)+(b-j)*(b-j);
    					x=max(l,x);//求最远的亲戚
                    }
    					
				}
			}
			cout<<x<<" ";
		}
		cout<<endl;
	}
	return 0;
}

P1424 小鱼的航程(改进版)

这道题就是求小鱼游了多少米,所以我们可以用for循环从n到n+m来依次判断如果%7==0或者%7==6,那么代表他是星期6和星期7,然后跳过,否x+=250。

#include<bits/stdc++.h>
using namespace std;
long long n,m,x;
int main(){
	cin>>n>>m;
	for(int i=n;i<=n+m-1;i++){
		if(i%7==6||i%7==0){//判断i是否是星期6或星期7
			continue;//跳过此次循环
		}
		x+=250;
	}
	cout<<x;
	return 0;
}

P3984 高兴的津津

这道题就是让我们求津津能开心多少天,这里每块金牌会使得我持续高兴T天,但是如果在这T又获得了一块奖牌,我们高兴的天数是不会累加的,是重新计算持续开心T天所以我们答案用+=min(m,a[i+1]-a[i])。

#include<bits/stdc++.h>
using namespace std;
long long n,m,x,a[200005],f,ans;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int ans=m;//最后一天一定会开心m天
	for(int i=1;i<n;i++){
		ans+=min(m,a[i+1]-a[i]);//因为第i块金牌的时间为a[i + 1] - a[i]
	}
	cout<<ans;
	return 0;
}

P12173 [蓝桥杯 2025 省 Python B] 最多次数

这道题就是让我们判断最多能切割出多少个他特别喜欢的字符串 ,所以我们只要用if判断一下是否是他特别喜欢的字符串然后把ans++,i+=2,就可以了。

#include<bits/stdc++.h>
using namespace std;
string s,a;
long long ans=0;
int main(){
	cin>>s;
	for(int i=0;i<s.size();i++){
		a=s.substr(i,3);
		if(a=="lqb"||a=="lbq"||a=="qlb"||a=="qbl"||a=="blq"||a=="bql"){判断是否是他喜欢的字符串
			ans++;
            i+=2;//把它搞下来
		}
	}
	cout<<ans;
	return 0;
}

B4006 [GESP202406 四级] 宝箱

这道题就是让我们判断一下我们背包里的最大值-最小值是否<k,所以我们可以用前缀和来做,注意用先把他sort从小到大排序再求前缀和,

#include<bits/stdc++.h>
using namespace std;
long long n,a[10005],sum[10005],k,ans;
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+1+n);//从小到大排序
	for(int i=1;i<=n;i++){
		sum[i]=sum[i-1]+a[i];//求前缀和
	}
	for(int i=1;i<=n;i++){//最小值
		for(int j=i;j<=n;j++){//最大值
			if(a[j]-a[i]<=k){
				long long s=sum[j]-sum[i-1];//求i到j的和
				ans=max(ans,s);//判断最大值
			}
		}
	}
	cout<<ans;
	return 0;
}