情况十分惨烈,被大模拟吊打
查看原帖
情况十分惨烈,被大模拟吊打
250699
mot1ve楼主2021/1/30 20:04

估计是最垃圾的做法,用了个二维map映射,不知道哪里有问题

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,Ta,Tb,Tc,Td,A,H,E,R;
int P[1000010],S[1000010];
struct node{
	int ti,id,score;//题,学号,成绩 
}a[1000010];
int ans1;
double ans2;//ans1是传统,ans2是洛谷 
map<int,int> maxn;
map<int,map<int,int> > mp;//mp每个人评测的次数,op表示用教师机还是cena 
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>P[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>S[i];
	}
	cin>>Ta>>Tb>>Tc>>Td>>A>>H>>E;
	cin>>R;
	for(int i=1;i<=R;i++)
	{
		cin>>a[i].ti>>a[i].id>>a[i].score;
		mp[a[i].id][a[i].ti]++;//这个学生评测次数 
	}
	ans1+=n*Ta;//初始装载数据的花费
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			int temp=mp[S[i]][P[j]];
			if(temp)
			{
				if(Ta+Tc*temp<Tb*temp)
				ans1+=Ta+Tc*temp;
				else ans1+=Tb*temp;
			}
		} 
	} 
	for(int i=1;i<=R;i++)
	{
		if(a[i].score>maxn[a[i].ti])
		{
			maxn[a[i].ti]=a[i].score;
			if(E==1)
			ans1+=Td;
		}
	} 
	ans2+=n*Ta;
	ans2+=Tc*R;
	ans2/=(A*0.01);
	ans2=(int)ans2;
	ans2+=H;
	cout<<ans1<<endl<<ans2<<endl;
	if(ans2<ans1)
	puts("Use Luogu!");
	else puts("Forget it...");
	return 0;
}
2021/1/30 20:04
加载中...