2021-11-15上周比赛总结

比赛题目

Round decimals

Round decimals

题意:本题大致就是给你一个数字,然后四舍五入转化成一个整数,因为类型转换会去掉小数部分,并不会直接入一位
解题方法:直接对该数字加上0.5然后再类型转换即可。

//也不知道自己做题的时候为什么没有这么好的思路,我是菜狗
#include <iostream>
#include <cmath>

using namespace std;

int main(){
    float a;
    scanf("%f", &a);
    printf("%d", (int)(a+0.5);
	return 0;
}

Counting Arrays

Counting Arrays

本题题意:给定n个序列,判断不重复序列的个数
解题思路:利用set的去重复特性,将序列(用vector数组存储序列)当作元素存进set中,最后返回set的长度即可

/*
这个set用的就很巧妙,要是我掌握的熟一点也不至于……
不过新学了一个高级的for循环<笑哭>
for(auto &x : arr) 可以用来输入
for(auto x : arr) 可以用来输出
比我之前那个for快多了
*/
#include <iostream>
#include <vector>
#include <set>

using namespace std;

int main(){
	int n, m, x;
	scanf("%d", &n);
	set<vector<int>> se;
	for(int i=0; i<n; i++){
		scanf("%d", &m);
		vector<int> arr(m);
		for(auto &x : arr) scanf("%d", &x);
		se.insert(arr);
	}
	printf("%d", se.size());
	return 0;
}

The baggage

The baggage

本题题意:现有五种不同重量(分别为1、2、3、4、5)的包裹和最多能扛动五种不同重量的包裹的人(这五类人分别能扛动1、2、3、4、5这些重量的包裹)。给定任意数量、任意重量的包裹,并有任意数量能扛动任意重量的人,问这些人能否将这些包裹扛起来
解题思路:先将所有重量为5的包裹分配给能扛动5个重量的人,判断是否能重量为5的包裹扛完。接下来将所有重量为4的包裹分配给能扛动4个重量的人,如果包裹有剩余,则分配给没有扛包裹的能扛动重量为5的包裹的人,然后再将所有重量为3的包裹分配给能扛动3个重量的人,将剩余包裹分配给能扛动质量为5的人,如果还有剩余,分配给能扛动质量4的人。将上述步骤进行递归操作,即可对该问题作出初步判断。最后就是考虑重量为1、2的包裹剩余的情况,将其对应的分配到能扛动质量为3、4、5并有余力扛质量为1、2的包裹的人,最后即可得到结果。

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

#define N 200010
#define MOD (ll)998244353
#define ll long long
#define rep(i, n) for(int i = 0; i < n; ++i)

ll a[6];
ll b[6];

void pack(ll x, ll y) {
	ll c = min(a[x], b[y]);
	a[x] -= c;
	b[y] -= c;
	b[y - x] += c;
	return;
}

int main(void) {
	ll t;
	bool ans;
	cin >> t;
	rep(tt, t) {
		rep(i, 5)cin >> a[i + 1];
		rep(i, 5)cin >> b[i + 1];
		a[0] = 0;
		b[0] = 0;

		pack(5, 5);
		pack(4, 4);
		pack(4, 5);
		pack(3, 3);
		pack(3, 5);
		pack(3, 4);
		rep(i, 4)pack(2, 5 - i);
		rep(i, 5)pack(1, 5 - i);

		ans = true;
		rep(i, 5)if (a[i + 1] > 0)ans = false;
		if (ans)cout << "Yes" << endl;
		else cout << "No" << endl;
	}

	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值