[CSP-S 시뮬레이션 테스트] : 군대 국가 X (욕심)

제목 설명

$의 X의 $ 및 $ Y $ 국가 나라는 전쟁을 시작했다!
군사 직원 $ X의 $ 국가로서, 당신은 상황의 심각성을 알고 있습니다. 적과 더 나은 거래하기 위해, 당신은, 당신이 $ n 개의 $ 거점을 깰거야 $ N $ 메시지 거점 달러 (A $) Y의 $ 국가의 도시를 수집!
계수 A를 $ 화력 각각 $ I $ 거점에 대한 정보는 [내가] $는 군인의 수 $ B는 [i]는 $ 조성물은, 훌륭한 계획적인 능력을 가진 직원 장교로, 물론 당신은 상황의 분석을 할 수 있습니다. 이 전쟁은 $ A 작전 중 사망 [I] $ 군인이 될 것입니다 후 사실, 당신은, 결과를 분석 나는, 적어도 $ B를 자신의 병사들의 사기를 안정화하기 위해 [내가] $ 군인이 전쟁을 입력 거점을 점령.
다른 거점이 될 수 있습니다 전투에서 죽은 병사의 거점 전쟁에서하지 않도록 지속적으로 파견 조정으로 인해 사용할 수 군인, 밖으로 실행. 이 $ n 개의 $ 거점에게 필요한 최소한의 휴식 군인의 수를 계산해야합니다.
당신이 필요로하는, 그래서 더 나쁜 아직, $ T $ 도시의 총, 군인의 최소 수는 $ T의 $ 도시는 출력을 순차적으로 필요합니다.


입력 형식

정수 $의 T의 $ 첫 번째 줄은, 도시의 수를 나타냅니다.
$ T는 데이터의 다음 세트를 $. 각 라인은 제 N- $ $으로의 데이터의 개수를 포함 위치의 수를 나타내고; N- $ $ 다음 행의 첫 번째 행은 두 $ I 숫자 불 계수 $의 A [i]를 $ 군인들의 위치를 나타내는 $ 포함하며 번호 $ B [I] $.


출력 형식

도시의 각 출력 라인의 경우, 군인의 최소 수는 모든 사이트에서 필요한 도시를 캡처 나타냅니다.


견본

샘플 입력 :

2
2
4 7
1 5
3
1 4
4 6
3 5

샘플 출력 :

8
10


데이터 범위 및 팁

leqslant 9 $ \ $ N의 $ 20 \ % $으로 이전 데이터
\ $ N의 $ 40 \ % $으로 전의 데이터 leqslant 1,000 $
$ 100 \ % $ 데이터 $ N 개의 \의 leqslant 100,000, T \ leqslant 10,1 \ leqslant [I] \ leqslant B [I ] \ leqslant $ 1,000,000,000.
더 많은 데이터가이 질문에 읽을 때, 읽을 수있는 빠른 방법을 사용하는 것이 좋습니다.


문제 해결

나는 당신에게 모든 행복한 국립 날, 행복 교육을 기원합니다!

분명히 우리는 말을, 다음 $ 한 뒤쪽에 큰 더 나은 것 정말 아무것도 달러 (A $)를 잃지 않을 것이다

시간 복잡도 : $ \ 시타 $ (T \ 시간이 N 로그 n \).

기대 점수 : $ $ 100 점을.

실제 점수 : $ $ 100 점.


코드 시간

#include<bits/stdc++.h>
using namespace std;
struct rec{int a,b,delta;}e[100001];
int n;
long long ans,now;
bool cmp(rec a,rec b){return a.delta>b.delta;}
int main()
{
	int T;scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		ans=now=0;
		for(int i=1;i<=n;i++)
		{
			scanf("%d%d",&e[i].a,&e[i].b);
			e[i].delta=e[i].b-e[i].a;
		}
		sort(e+1,e+n+1,cmp);
		for(int i=1;i<=n;i++)
		{
			if(now<e[i].b)
			{
				ans+=e[i].b-now;
				now=e[i].b;
			}
			now-=e[i].a;
		}
		printf("%lld\n",ans);
	}
	return 0;
}

rp++

추천

출처www.cnblogs.com/wzc521/p/11616056.html