[CSP-Sシミュレーションテスト]:陸軍国X(貪欲)

タイトル説明

$のX $と$ Y $の国の国が戦争を始めました!
軍事スタッフの$ Xの$国として、あなたは事態の深刻さを実現しています。敵とのより良い対処するためには、あなたは、あなたがこの$ n $というの拠点を破るつもりだ$ N $メッセージの牙城$ Yの$国の都市を集めます!
係数によって$火力の各$ I $の牙城[i]は$のための情報、兵士$ Bの番号[i]は$組成物は、優れた計画的な能力を持つスタッフの役員として、もちろんあなたは状況のこの分析を取ることができます。実際には、結果を分析し、そこに戦争が戦死$ A [i]が$兵士になります後、私は、自分の兵士の士気、少なくとも$ Bを安定させるためには、[i]は$兵士たちは、戦争に入った要塞を捕獲しました。
他の砦かもしれ戦闘で死亡した兵士の牙城戦争ではないので、常に不測の調整のために、可能な兵士は、不足しています。あなたはこの$ n $というの拠点に必要な最小を破るために兵士の数を計算する必要があります。
さらに悪いことには、$ T $の都市の合計ので、あなたは兵士の最小数は$ T $の都市に順次出力を必要とする必要があります。


入力形式

最初の行の整数の$ T $は、都市の数を表します。
$ Tはデータの次のセットを$。各ラインは第N- $ $のデータ数が含まれ、位置の数を表し; N- $ $次の行を、最初の行は、2つの$ 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 \のleqslant10万ため、T \ leqslant 10,1 \ leqslant A [i]は\ leqslant B [I ] \ leqslant10億$。
より多くのデータがこの質問に読み込まれると、それを読むためより高速な方法を使用することをお勧めします。


問題の解決策

私はあなたにすべての幸せなナショナルデー、幸せなトレーニングをしたいです!

もちろん、私たちは後ろに大きなを失う方が良いだろう、そしてあなたは、言うには本当に何も$を$なかったです

時間の複雑さ:$ \シータ(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