CSP2019 J組(入門級)第二輪認證題解


2019年一等獎浙江分數線為265分,二等獎分數線為100分,三等獎分數線為70分。
當年附中情況,wm為245,dyc為155,zxy為110,zzx為105,pz為100。
luogu對應題目 T1 數字游戲T2 公交換乘T3 紀念品T4 加工領獎 ,可以到luogu上查看更多題解。

T1 數字游戲 字符串

簡單字符串,然后依次檢查累加即可。

T2 公交換乘 模擬、隊列

不少同學沒看到免費搭乘一次票價不超過地鐵票價的公交車,導致0分。
45分的代碼

#include<bits/stdc++.h>
using namespace std;
struct T{int lei,money,time;}a[100005];
struct T1{int money,ff=0,time;}b[100005];
int main()
{
    freopen("transfer.in","r",stdin);
    freopen("transfer.out","w",stdout);
    int n,tot=0,left=0,sum=0;
    cin>>n;
    for(int i=0;i<n;i++)cin>>a[i].lei>>a[i].money>>a[i].time;
    for(int i=0;i<n;i++)
    {
    	if(a[i].lei==0)
    	{
    		sum+=a[i].money;
			b[tot].money=a[i].money;
			b[tot++].time=a[i].time+45;
		}
		else
		{
			int f=0;
			for(int j=0;j<tot;j++)
			{
				if(b[j].time>=a[i].time&&b[j].money>=a[i].money&&b[j].ff==0)
				{
					f=1;
					b[j].ff=1;
					break;
				}
			}
			if(f==0)sum+=a[i].money;
		}
	}
	cout<<sum<<"\n";
    return 0;
}

用一個數組來裝所有的收集到的贈票。每當坐地鐵的時候,就直接花錢,然后獲得一張贈票,放到數組里面。每當坐公交的時候,看看數組里面有沒有時間合適,價格小於現在公交票價的贈票,並且沒用過的贈票,直接用時間最早的那一張就可以了。而且45分鍾后就過期了,可以用一個隊列記錄下這張票,這個題卡常,可以直接用數組模擬隊列

T3 紀念品 背包

這個題有點難,將 每件紀念品的價格增量 作為其價值,每件紀念品在第一天購入的價格 作為其質量, M 作為背包容量,這個問題就轉化為了一個完全背包問題。恭喜陳瀚東做對了

T4 加工領獎 廣搜、最短路

相對來說,T4是比T3簡單的。求出1到各個點的奇偶最少步數 即可。不過要使用vector代替鄰接數組存儲。本題楊添盛獲得了滿分。
若存在3->4->5->6->7->1,長度為5,那么比如重復經過點5就是7了,3->4->5->6->5->6->7->1。一條邊想走幾次就走幾次,那么存在+2,+4,...,+2n,同奇偶。長度為6的存在嗎?不確定,所以奇偶必須分開求解,最終判定條件為奇偶相同且大於等於最少步數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM