社区讨论

今晚 C

学术版参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo2b3qnk
此快照首次捕获于
2023/10/23 10:56
2 年前
此快照最后确认于
2023/11/03 11:06
2 年前
查看原帖
吃了两发 WA,找半天看不出错
思路:对每个选手排序,分别计算切题数和罚分数,再与 1 好鲁道夫比较。
CPP
#include <iostream>
#include <vector>
#include <algorithm>
#define int long long
using namespace std;

const int maxn = 1e5 + 5;
vector<int> a[maxn];
int n, m, T;

void init()
{
	for (int i = 1; i <= maxn; i++)
	{
		a[i].empty();
	}
}

signed main()
{
	int ttt;
	cin >> ttt;
	while (ttt--)
	{
		init();
		cin >> n >> m >> T;
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= m; j++)
			{
				int v;
				cin >> v;
				a[i].push_back(v);
			}
			sort(a[i].begin(), a[i].end());
		}
		int t1 = 0, v1 = 0;
		int ans = 1;
		for (int i = 1; i <= n; i++) // 选手
		{
			int tt = 0, vv = 0, tsum = 0;
			for (int j = 0; j <= m - 1; j++)
			{
				if (tsum + a[i][j] <= T)
				{
					vv++;
					tt += a[i][j] + tsum;
					tsum += a[i][j];
				}
				else
				{
					break;
				}
			}
			// cout << i << ": " << tt << " " << vv << endl;
			if (i == 1)
			{
				t1 = tt;
				v1 = vv;
			}
			else if (v1 < vv || (v1 == vv && t1 > tt))
			{
				ans++;
			}
		}
		// cout << "ldf: " << t1 << " " << v1 << " " << ans << endl;
		cout << ans << endl;
	}
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...