2020年冬休み[gmoj2404] [牛車oxcart] [貪欲]

タイトルの説明

高速道路にはN(1 <= N <= 50,000)の牛があり、1 ... Nの番号が付けられています。各牛は自分の車を運転し、i番目の牛の速度はS_i(1 <= S_i <= 1,000,000)です。 km / h、高速道路にM車線があることを伝えます(1 <= M <= N)。安全のために、各牛は次の原則に従います。同じレーンの前にx頭の牛がいる場合、牛の速度はD X(0 <= D <= 5,000)KM / h減少します。もちろん、0未満には下がりません。車両速度は最大でなければなりません(S_i-D X、0)。車間距離が広いので、後ろの車が前の車より速い場合でも、衝突を心配する必要はありません。
高速道路には最低速度L(1 <= L <= 1,000,000)があります。この速度を下回る車は高速道路に進入できません。次に、高速道路を走行できる車両の数を計算してください。

入力

1行目:4つのスペースで区切られた整数N、M、D、L;
行2 ... N + 1:行i + 1は、i番目の牛の初速度を示します。

アウトプット

1行:高速で運転できる去勢牛カートの最大数を示す整数を出力します。

入力例

3 1 1 5
5
7
5

出力例

2

分析

実際、ダブルループして、すべての車とすべてのレーンを列挙して、貪欲にすることができます。

コードオン

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,d,l,s[50001],a[50001],ans,s1,t;
int main()
{
	freopen("cowcar.in","r",stdin);
	freopen("cowcar.out","w",stdout); 
    cin>>n>>m>>d>>l;
    for(int i=1;i<=n;i++)
    {
    	cin>>s[i];
	}
	sort(s,s+n+1);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			t=s[i]-(a[j]*d);//c[j]为第j条车道上牛的数量
			s1=max(t,0);//速度不小于0 
			if(s1>=l)//如果速度满足条件就进行统计
			{
				a[j]++;
				ans++;
				break;
			}
		}
	}
	cout<<ans;
	fclose(stdin);
	fclose(stdout);
    return 0;
}

元の記事を110件公開 100 件を獲得 8023年を訪問

おすすめ

転載: blog.csdn.net/dglyr/article/details/104906459