9.16考試 第一題 X國的軍隊題解
阿新 • • 發佈:2017-09-17
class while 死亡人數 names scanf math src gif 技術
這道題總體來看還是比較滿意的。連想帶打不超過半個小時,打了不到當時基本讀懂後就感覺是貪心,但貪什麽很重要,當時一開始想的是貪心死亡人數,從小到大搞,然後自己造了幾個小數據,還好WA了,然後又列了一個式子,直接證明了貪心。式子如下:
我們設有兩個據點,一個A=x1,B=y1,另一個A=x2,b=y2。
若x1-y1>x2-y2
則先打A所需為 x1+(x2-(x1-y1))=x2+y1,先打B為x2+(x1-(x2-y2))=x1+y2。
由上式可知x1+y2>x2+y1,所以應當先打A。
其余同理。
然後我們只要sort一遍打一個模擬就好了。
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 #include<cstring> 5 #include<queue> 6 #include<algorithm> 7 #include<cmath> 8 #include<map> 9 #define N 100005 10 using namespace std; 11 int n,t; 12 struct no 13 { 14 long longView Codea,b,c; 15 }node[N]; 16 int px(no a,no b) 17 { 18 return a.c>b.c; 19 } 20 long long now,sum; 21 int main() 22 { 23 scanf("%d",&t); 24 while(t--) 25 { 26 scanf("%d",&n); 27 for(int i=1;i<=n;i++) 28 { 29 scanf("%lld%lld",&node[i].a,&node[i].b); 30 node[i].c=node[i].b-node[i].a;31 } 32 sort(node+1,node+n+1,px); 33 now=sum=0; 34 for(int i=1;i<=n;i++) 35 { 36 if(now<node[i].b) 37 { 38 sum+=node[i].b-now; 39 now=node[i].b; 40 } 41 now-=node[i].a; 42 } 43 printf("%lld\n",sum); 44 } 45 return 0; 46 }
9.16考試 第一題 X國的軍隊題解