codeforces 815 A、B

A. Crossmarket

题意:两个人分别从左上角和左下角出发最终到达右下角和右上角,走过的路可以标记上传送,从某个位置传动到另一个被标记的地方只消耗一个能量,其他的移动是每次消耗一个能量移动到相邻的点,问两人到达终点总共消耗多少能量

思路:比较简单,根据样例就可以推出式子,消耗的能量的总和是2 * m + n - 2

代码:

#include <bits/stdc++.h>
using namespace std;

void solve() {
	int n, m;
	scanf("%d%d", &n, &m);
	
	if(n == 1 && m == 1) {
		cout << "0" << endl;
		return ;
	}
	
	if(n < m) swap(n, m);
	
	cout <<  2 * m + n - 2 << endl;
}

int main() {
	int t;
	scanf("%d", &t);
	
	while (t -- ) {
		solve();
	}
	
	
	
	return 0;
} 

B. Beautiful Array

题意:通过给定的限制,确定一个最美的数组并输出(输出顺序没有限制),数组中一共n和元素,数组中元素总和是s,数组中每个元素除以k之后数组的总和是b

思路:不存在的情况:1、当b * k > s 是无法构成满足所有条件的数组 2、当 s > b * k + ( k  - 1 ) * (n - 1)是无法构成满足的数组

存在的情况:1、只需构成一个满足b * k 的元素,其他剩余的 s - k * b 只需要在最后的元素中分配一下,并且不高于k即可

代码:

#include <bits/stdc++.h>
using namespace std;

typedef unsigned long long ll;

const int N = 1e5 + 5;
int a[N];

void solve() {
	ll n, k, b, s;
	cin >> n >> k >> b >> s;
	
	if(b * k > s || s > b * k + n * (k - 1)) {
		cout << -1 << "\n";
		return ;
	}
	s = s - b * k;
	
	for (int i = 1; i < n; i ++ ) {
		cout << min(k - 1, s) << " ";
		s -= min(s, k - 1);
	}
	cout << s + b * k << "\n";
}

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	
	int t;
	cin >> t;
	
	while (t -- ) {
		solve();
	} 
	
	
	
	return 0;
}

c ++ 快读读写的使用需要需要注意不要使用同时使用标准的scanf和cin ,print和cout进行输入输出,或造成很多无法处理的错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值