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进行输入输出,或造成很多无法处理的错误