1 条题解

  • 1
    @ 2025-2-12 15:19:59

    Sol

    其实就是中等的模拟。代码只是变量比较长。

    造数据才是大模拟!cyx 为了造数据更容易甚至改了题面。但尽管如此数据生成的代码与 std 的长度相差不大。

    我们对于每个记录,按照题意描述检查一下,如果过了就打上标记,并计算时间差得到该题的罚分。被 hack 就取消标记。出现非 CE 或 非 WA on 1 就把这题分数按规定减去 5050

    Code

    /*
    Auther:  cyx2009
    Luogu:   516346
    QQ:      2176807108
    */
    #include <bits/stdc++.h>
    using namespace std;
    int n, m, k;
    string Problem_Name[2520];
    struct Submission
    {
    	string Time, Verdict, Problem;
    	int Minute;
    } CYX_Submission[25020], ZJS_Submission[25020];
    string Start_Time;
    int INT_Start_Time;
    long long CYX_Score, ZJS_Score;
    int ZJS_WA[2520];
    int CYX_WA[2520];
    bool ZJS_Hacked[2520];
    bool CYX_Hacked[2520];
    bool ZJS_AC[2520];
    bool CYX_AC[2520];
    int ZJS_Problem_Score[2520];
    int CYX_Problem_Score[2520];
    map<string, int> Name_to_Id;
    int Time_String_to_Int(string Time)
    {
    	int HH, MM, Minute;
    	HH = (Time[0] - '0') * 10 + (Time[1] - '0');
    	MM = (Time[3] - '0') * 10 + (Time[4] - '0');
    	Minute = HH * 60 + MM;
    	return Minute;
    }
    int Get_Int_Submission_Time(string Time)
    {
    	int Minute = Time_String_to_Int(Time);
    	return Minute < INT_Start_Time ? Minute + 24 * 60 - INT_Start_Time : Minute - INT_Start_Time;
    }
    int main()
    {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cout.tie(0);
    	cin >> n >> m >> k;
    	for (int i = 1; i <= k; i++)
    	{
    		cin >> Problem_Name[i];
    		Name_to_Id[Problem_Name[i]] = i;
    	}
    	cin >> Start_Time;
    	INT_Start_Time = Time_String_to_Int(Start_Time);
    	for (int i = 1; i <= n; i++)
    	{
    		cin >> ZJS_Submission[i].Time >> ZJS_Submission[i].Problem >> ZJS_Submission[i].Verdict;
    		ZJS_Submission[i].Minute = Get_Int_Submission_Time(ZJS_Submission[i].Time);
    	}
    	for (int i = 1; i <= m; i++)
    	{
    		cin >> CYX_Submission[i].Time >> CYX_Submission[i].Problem >> CYX_Submission[i].Verdict;
    		CYX_Submission[i].Minute = Get_Int_Submission_Time(CYX_Submission[i].Time);
    	}
    	for (int i = 1; i <= n; i++)
    	{
    		if (ZJS_Submission[i].Verdict == "Hacked")
    		{
    			if (!ZJS_Hacked[Name_to_Id[ZJS_Submission[i].Problem]])
    			{
    				CYX_Score += 100;
    				ZJS_Hacked[Name_to_Id[ZJS_Submission[i].Problem]] = 1;
    				ZJS_AC[Name_to_Id[ZJS_Submission[i].Problem]] = 0;
    			}
    		}
    		else if (ZJS_Submission[i].Verdict == "CompileError")
    		{
    			continue;
    		}
    		else if (ZJS_Submission[i].Verdict.size() >= 23 && ZJS_Submission[i].Verdict.substr(0, 21) == "Wrongansweronpretest(")
    		{
    			if (ZJS_Submission[i].Verdict[21] == '1')
    				continue;
    			ZJS_WA[Name_to_Id[ZJS_Submission[i].Problem]]++;
    		}
    		else if (ZJS_Submission[i].Verdict == "PretestsPassed")
    		{
    			ZJS_AC[Name_to_Id[ZJS_Submission[i].Problem]] = 1;
    			ZJS_Problem_Score[Name_to_Id[ZJS_Submission[i].Problem]] =
    				max(
    					Name_to_Id[ZJS_Submission[i].Problem] * 150,
    
    					Name_to_Id[ZJS_Submission[i].Problem] * 500 -
    						ZJS_Submission[i].Minute * Name_to_Id[ZJS_Submission[i].Problem] * 2 -
    						ZJS_WA[Name_to_Id[ZJS_Submission[i].Problem]] * 50);
    			ZJS_WA[Name_to_Id[ZJS_Submission[i].Problem]]++;
    		}
    	}
    	for (int i = 1; i <= m; i++)
    	{
    		if (CYX_Submission[i].Verdict == "Hacked")
    		{
    			if (!CYX_Hacked[Name_to_Id[CYX_Submission[i].Problem]])
    			{
    				ZJS_Score += 100;
    				CYX_Hacked[Name_to_Id[CYX_Submission[i].Problem]] = 1;
    				CYX_AC[Name_to_Id[CYX_Submission[i].Problem]] = 0;
    			}
    		}
    		else if (CYX_Submission[i].Verdict == "CompileError")
    		{
    			continue;
    		}
    		else if (CYX_Submission[i].Verdict.size() >= 23 && CYX_Submission[i].Verdict.substr(0, 21) == "Wrongansweronpretest(")
    		{
    			if (CYX_Submission[i].Verdict[21] == '1')
    				continue;
    			CYX_WA[Name_to_Id[CYX_Submission[i].Problem]]++;
    		}
    		else if (CYX_Submission[i].Verdict == "PretestsPassed")
    		{
    			CYX_AC[Name_to_Id[CYX_Submission[i].Problem]] = 1;
    			CYX_Problem_Score[Name_to_Id[CYX_Submission[i].Problem]] =
    				max(
    					Name_to_Id[CYX_Submission[i].Problem] * 150,
    
    					Name_to_Id[CYX_Submission[i].Problem] * 500 -
    						CYX_Submission[i].Minute * Name_to_Id[CYX_Submission[i].Problem] * 2 -
    						CYX_WA[Name_to_Id[CYX_Submission[i].Problem]] * 50);
    			CYX_WA[Name_to_Id[CYX_Submission[i].Problem]]++;
    		}
    	}
    	for (int i = 1; i <= k; i++)
    	{
    		if (ZJS_AC[i])
    		{
    			ZJS_Score += ZJS_Problem_Score[i];
    		}
    		if (CYX_AC[i])
    		{
    			CYX_Score += CYX_Problem_Score[i];
    		}
    	}
    	cout << ZJS_Score << " " << CYX_Score << endl;
    	if (CYX_Score > ZJS_Score)
    	{
    		cout << "cyx" << endl;
    	}
    	else if (ZJS_Score > CYX_Score)
    	{
    		cout << "zjs" << endl;
    	}
    	else
    	{
    		cout << "Wow!Same!" << endl;
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    715
    时间
    1500ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    76
    已通过
    9
    上传者