估计是最垃圾的做法,用了个二维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;
}