算法强训day17

一、小乐乐改数字

链接:小乐乐改数字_牛客题霸_牛客网

#include <iostream>
using namespace std;

int main() {
    int num;
    cin >> num;
    string s;
    while (num)
    {
        s.insert(s.begin(), num % 10 + '0');
        num /= 10;
    }
    for (auto& i : s)
    {
        if ((i - '0') % 2 == 0)
            i = '0';
        else
            i = '1';
    }
    cout << stoi(s);
}

二、十字爆破

直接把每行每列存一下

// 64 位输出请用 printf("%lld")
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
int main()
{
	int n, m;
	cin >> n >> m;
	vector<long long>* v = new vector<long long>[n];
	vector<long long> col;
	vector<long long> cls;
	col.resize(n);
	cls.resize(m);
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			long long x;
			cin >> x;
			v[i].push_back(x);
			col[i]+=x;
		}
	}
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cls[i] += v[j][i];
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			printf("%ld ", cls[j] + col[i] - v[i][j]);
		}
		printf("\n");

	}
}

三、比那名屋的桃子

滑动窗口

#include<iostream>
using namespace std;
#include<vector>
int main()
{
	int day, n;
	cin >> day >> n;
	vector<int> value;
	vector< long long> v;
	vector<int> devalue;
	vector<long long> dv;
	int maxday = 1;
	long long maxvalue = 0;
	long long mindevalue = 0;
	long long s = 0;
	int sum = 0;
	for (int i = 0; i < day; i++)
	{
		int x;
		cin >> x;
		value.push_back(x);
		s += x;
		sum++;
		if (sum == n)
		{
			v.push_back(s);
			s -= value[i - n + 1];
			sum--;
		}
	}
	int i = day - n + 1 >= 0 ? day - n + 1 : 0;
	for (i; i < day; i++)
	{
		v.push_back(s);
		s -= value[i];
	}

	s = 0;
	sum = 0;
	for (int i = 0; i < day; i++)
	{
		int x;
		cin >> x;
		devalue.push_back(x);
		s += x;
		sum++;
		if (sum == n)
		{
			dv.push_back(s);
			s -= devalue[i - n + 1];
			sum--;
		}
	}
	i = day - n + 1 >= 0 ? day - n + 1 : 0;
	for (i; i < day; i++)
	{
		dv.push_back(s);
		s -= devalue[i];
	}
	int maxd = 1;
	long long maxv = v[0];
	long long mindev = dv[0];
	for (int i = 1; i < day; i++)
	{

		if (v[i] == maxv)
		{
			if (dv[i] < mindev)
			{
				maxd = i + 1;
				maxv = v[i];
				mindev = dv[i];
			}
		}
		if (v[i] > maxv)
		{
			maxd = i + 1;
			maxv = v[i];
			mindev = dv[i];
		}
	}
	cout << maxd;
}

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值