原题链接
P2197
题目类型:
普
及
/
提
高
−
{\color{yellow} 普及/提高-}
普及/提高−
题目大意
题目太长了,懒得手打,直接粘贴吧
XX中学的两位信息组的教练正在为学校信息组是否应当将洛谷作为主要的训练工具而争论不休,最后决定采取一个量化的办法来决定是否迁移。
该中学的原来训练方法是,在机房的教师机里面用
c
e
n
a
cena
cena装载好测试数据,装载数据所需要
T
a
T_a
Ta时间,每一道题目都要装载。学生写好代码后,可以跑到教师机上收取程序并进行评测。但由于需要往返的路程,因此每跑一次就要浪费
T
b
T_b
Tb 时间。所以也允许学生在自己的机子上装载好测试数据,可以根据自己的需要选择装载的题目,这需要花费和在教师机装载数据一样的时间
T
a
T_a
Ta ,但是每次评测花费的时间就减少为
T
c
T_c
Tc。此外,该中学可能会用
e
x
c
e
l
excel
excel记录各位同学的训练情况,如果某位同学的某道题的得分高于表格里的记录,那就会花费
T
d
T_d
Td 时间将这个成绩更新,否则就不必费那个事了,如果之前没有提交过这道题视为表格记录的程序为
0
0
0分。
而在洛谷中,只需要将题目和测试数据上传到洛谷,花费
T
a
T_a
Ta 时间。每次评测学生只需花费
T
c
T_c
Tc 时间即可。记录成绩?那是洛谷的事儿,一提交完就帮你整理好了表格根本不费时间。
看起来可以省下不少时间吧。然而,支持传统训练方法的教练认为,洛谷并非
100
%
100\%
100%稳定,在有的情况会无法提供服务,因此首先要将洛谷的耗时除以它的可用度(一个小于
100
%
100\%
100%的数字
A
%
A\%
A%)并去掉小数点。又因为传统观念不易纠正,总是有不信任将题目数据交给洛谷这样的想法(
k
k
k
s
c
03
kkksc03
kkksc03:怪我咯?),因此使用洛谷的耗时还要再加上一个罚时
H
H
H以做公平比较。
现在给出该中学的训练情况,希望你帮两位教练分析一下到底该如何选择。
S
a
m
p
l
e
\mathbf{Sample}
Sample
I
n
p
u
t
\mathbf{Input}
Input
4 4//题目个数和学生个数
501 502 503 504//题目号
2 3 5 7//学生号
50 30 10 5 93 50 1//Ta,Tb,Tc,Td,a,h,e
//其中e为1则要记录分数,e为0就不用记录分数
10//评测数
501 2 10//题目号,学生号,分数
501 2 80
501 2 70
502 3 0
502 3 0
504 5 100
503 7 0
503 7 0
503 7 0
503 7 10
S a m p l e \mathbf{Sample} Sample O u t p u t \mathbf{Output} Output
480//cena成绩
372//luogu成绩
Use Luogu!//如果cena好就输出Forget it...,否则输出Use Luogu!
H
i
n
t
&
E
x
p
l
a
i
n
\mathbf{Hint\&Explain}
Hint&Explain
洛谷的用时为:装载题目4*50=200
单位时间,评测10*10=100
单位时间,除去可信度(200+100)*100/93=322
单位时间,加上罚时总共322+50=372
单位时间。
而XX中学的用时为:装载题目4*50=200
单位时间,评测题目分两类,一类是自己装载,另一类是在老师电脑上评测。
2
2
2号学生,
7
7
7号学生使用自己的电脑测试,用时50+10*3=80
和50+10*4=90
单位时间。而
3
3
3号学生,
5
5
5号学生使用老师的电脑用时30*2=60
和30*1=30
单位时间,加上记录分数4*5=20
单位时间,总共200+80+90+60+30+20=480
单位时间。
解题思路
这题就是一道妥妥的模拟题啊!题目都写了那么多,你只要按着题目打代码不就轻轻松松
吗?真不知道这是怎么变成黄题的
这里有一个细节,就是他的学号和题目号都是
≤
100000000
(
1
e
+
8
)
\le100000000(1e+8)
≤100000000(1e+8)的,所以这里就可以引出语言歧视问题 C++ STL库里面的
m
a
p
map
map。
上代码
#include<iostream>
#include<map>
using namespace std;
int n,m,sco[1001][1001];
map<int,int> que,stu;
int ta,tb,tc,td,a,h,e;
int s1,s2,test[1001][1001];
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
{
int x; cin>>x;
que[x]=i;
}
for(int i=1; i<=m; i++)
{
int x; cin>>x;
stu[x]=i;
}
cin>>ta>>tb>>tc>>td>>a>>h>>e;
s1=s2=ta*n;
int r;
cin>>r;
s2+=tc*r;
while(r--)
{
int x,y,z;
cin>>x>>y>>z;
test[que[x]][stu[y]]++;
if(e&&sco[que[x]][stu[y]]<z) s1+=td,sco[que[x]][stu[y]]=z;
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
int own,tea;
tea=tb*test[i][j];
own=ta+tc*test[i][j];
s1+=min(tea,own);
}
}
s2=(s2*100)/a+h;
cout<<s1<<endl<<s2<<endl;
if(s1<s2) cout<<"Forget it..."<<endl;
else cout<<"Use Luogu!"<<endl;
return 0;
}
完美切题 ∼ \sim ∼