社区讨论

S T2求调

灌水区参与者 4已保存回复 5

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@m2vm5pdc
此快照首次捕获于
2024/10/30 16:27
去年
此快照最后确认于
2025/11/04 15:42
4 个月前
查看原帖
rt,理论 60pts 的代码,思路就是按题意模拟。
CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 3e3 + 5;
int T;
int n,m,L,V;
struct node{
	int d,v,a;
}c[N];
int p[N];
vector<int> v[N];
struct node1{
	int val,id;
}mp[N];
int ans1,ans2;
bool tag[N][N];
int ln[N];
inline void erase(int x)
{
	for(int i = 1;i <= n;i++)
	{
		if(tag[i][x] && ln[i] == 1) return;
	}
	for(int i = 1;i <= n;i++)
	{
		if(tag[i][x]) ln[i]--; 
	}
	ans2++;
	return;
}
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin >> T;
	while(T--)
	{
		ans1 = ans2 = 0;
		cin >> n >> m >> L >> V;
		for(int i = 1;i <= n;i++) cin >> c[i].d >> c[i].v >> c[i].a;
		for(int i = 1;i <= m;i++) cin >> p[i];
		for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++) tag[i][j] = 0;
		for(int i = 1;i <= m;i++) mp[i] = {0}; 
		for(int i = 1;i <= n;i++) v[i].clear();
		sort(p + 1,p + m + 1);
		for(int i = 1;i <= n;i++)
		{
			bool f = 0;
			if(c[i].a == 0)
			{
				if(c[i].v > V) for(int j = 1;j <= m;j++) if(p[j] >= c[i].d) mp[j].val++,v[i].push_back(j),f = 1;
			}
			else
			{
				double pos = c[i].d + (V * V - c[i].v * c[i].v) * (double)1.0 / (c[i].a * 2);
				//cout << i << ":" << pos << "\n";
 				if(c[i].a > 0)
				{
					if(c[i].v > V) for(int j = 1;j <= m;j++) if(p[j] >= c[i].d) mp[j].val++,v[i].push_back(j),f = 1;
					if(c[i].v <= V) for(int j = 1;j <= m;j++) if(p[j] > pos) mp[j].val++,v[i].push_back(j),f = 1;
 				}
 				if(c[i].a < 0)
 				{
 					if(c[i].v > V) for(int j = 1;j <= m;j++) if(c[i].d <= p[j] && p[j] < pos) mp[j].val++,v[i].push_back(j),f = 1; 
				}	
			}
			if(f) ans1++;
		}
		for(int i = 1;i <= m;i++) mp[i].id = i;
		sort(mp + 1,mp + m + 1,[](node1 a,node1 b) {return a.val < b.val;});
		for(int i = 1;i <= n;i++) for(int r : v[i]) tag[i][r] = 1;
		for(int i = 1;i <= n;i++) ln[i] = v[i].size();
		for(int i = 1;i <= m;i++)
		{
			erase(mp[i].val);
		}
		cout << ans1 << " " << ans2 << "\n";
	}	
	return 0;
}

回复

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

正在加载回复...