제출 #257207

#제출 시각아이디문제언어결과실행 시간메모리
257207LawlietJob Scheduling (CEOI12_jobs)C++17
100 / 100
207 ms13816 KiB
#include <bits/stdc++.h>

using namespace std;
typedef long long int lli;

const int MAXN = 100010;
const int MAXM = 1000010;

int n, m, d;

int sQtd[MAXN];

vector<int> day[MAXN];

bool test(lli k)
{
	lli mn = 0;

	for(int i = 1 ; i <= n ; i++)
	{
		lli curValue = sQtd[i] - k*i - k*d;
		if( curValue > mn ) return false;

		mn = min( mn , sQtd[i] - k*i );
	}

	return true;
}

int bs()
{
	int l = 1;
	int r = m;

	while( l < r )
	{
		int m = ( l + r )/2;

		if( test( m ) ) r = m;
		else l = m + 1;
	}

	return r;
}

int main()
{
	scanf("%d %d %d",&n,&d,&m);

	for(int i = 1 ; i <= m ; i++)
	{
		int d;
		scanf("%d",&d);

		day[d].push_back( i );
	}

	for(int i = 1 ; i <= n ; i++)
		sQtd[i] = sQtd[i - 1] + (int)day[i].size();

	int ans = bs();

	printf("%d\n",ans);

	queue<int> cur;

	for(int i = 1 ; i <= n ; i++)
	{
		for(int j = 0 ; j < (int)day[i].size() ; j++)
			cur.push( day[i][j] );

		for(int k = 1 ; k <= ans && !cur.empty() ; k++)
		{
			printf("%d ",cur.front());
			cur.pop();
		}

		printf("0\n");
	}
}

컴파일 시 표준 에러 (stderr) 메시지

jobs.cpp: In function 'int main()':
jobs.cpp:48:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d",&n,&d,&m);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~
jobs.cpp:53:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&d);
   ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...