欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

青藤 最值、求和、计数 枚举巩固 1+2

程序员文章站 2022-06-17 18:42:32
青藤 最值、求和、计数 枚举巩固 1+2第一题 一维前缀和**题目大意:**给你n个数,q次询问区间[l,r]的数的总和。**分析:**要先做好预处理,到算的时候就只要减去之前的和就行了。代码#include using namespace std;int a, n, m;int s[100005];int main() { cin >> n >> m; for (int i = 1; i <= n;...

青藤 最值、求和、计数 枚举巩固 1+2

第一题 一维前缀和
**题目大意:**给你n个数,q次询问区间[l,r]的数的总和。
**分析:**要先做好预处理,到算的时候就只要减去之前的和就行了。
代码

#include <bits/stdc++.h>
using namespace std;
int a, n, m;
int s[100005];
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a;
        s[i] = s[i - 1] + a;
    }
    while (m--) {
        int l, r;
        cin >> l >> r;
        cout << s[r] - s[l - 1] << endl;
    }
    return 0;
}

第二题 二维前缀和
**题目大意:**给出一n行m列的矩阵,q次询问左上角为(x1,y1) ,右下角为(x2,y2)的子矩阵中数的和
**分析:**要先做好预处理,到算的时候就只要其他子矩阵的和加上重复的子矩阵就行了。
代码

#include<bits/stdc++.h>
using namespace std;
int a[10003][10003],s[10003][10003];
int main()
{
	ios::sync_with_stdio(false);
    cin.tie(0);
	int n,m,q;
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
		}
	for(int i=1;i<=q;i++)	
	{
		int x1,x2,y1,y2;
		cin>>x1>>y1>>x2>>y2;
		printf("%d\n",s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]);
	}
	return 0;
}

第三题 小鱼的航程
题目大意: 一只鱼一天行250km,周末休息,告诉你从星期x开始,游了n天,求总共游了几km。
**分析:**要一周一周算,按日算会超时。
代码

#include <bits/stdc++.h>
using namespace std;
long long x, x2, n, t, i, t2;
int main() {
    scanf("%lld%lld", &x, &n);
    for (i = 1; i <= 7; i++) {
        if (x == 8)
            x = 1;
        if (x < 6)
            t++;
        x++;
    }
    t2 = n / 7 * t;
    t = 0;
    for (i = 1; i <= n % 7; i++) {
        if (x == 8)
            x = 1;
        if (x < 6)
            t++;
        x++;
    }
    cout << (t2 + t) * 250;
    return 0;
}

第四题 楼层编号
题目大意: 小林住在m层,给你一个高能数字t,如果存在高能数字那么该楼层就不存在,让你求小林真实的楼层。
分析: 只要枚举每一天,是否存在高能数字就行了。然后再天数减去记录的数量。
代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,t,sum=0,k,ni;
	cin>>n>>t;
	for(int i=1;i<=n;i++)
	{
		ni=i;
		while(ni!=0)
		{
			if(ni%10==t)
			{
				sum++;
				break;
			}
			ni/=10;
		}
	}
	cout<<n-sum<<endl;
	return 0;
}

本文地址:https://blog.csdn.net/coollend/article/details/111052772