生活随笔
收集整理的這篇文章主要介紹了
还是贪心(结构体排序)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2128: 盾神與積木游戲
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 127 Solved: 39
[Submit][Status][Web Board]
Description
最近的m天盾神都去幼兒園陪小朋友們玩去了~
每個(gè)小朋友都拿到了一些積木,他們各自需要不同數(shù)量的積木來拼一些他們想要的東西。但是有的小朋友拿得多,有的小朋友拿得少,有些小朋友需要拿到其他 小朋友的積木才能完成他的大作。如果某個(gè)小朋友完成了他的作品,那么他就會(huì)把自己的作品推倒,而無私地把他的所有積木都奉獻(xiàn)出來;但是,如果他還沒有完成 自己的作品,他是不會(huì)把積木讓出去的喲~
盾神看到這么和諧的小朋友們感到非常開心,于是想幫助他們所有人都完成他們各自的作品。盾神現(xiàn)在在想,這個(gè)理想有沒有可能實(shí)現(xiàn)呢?于是把這個(gè)問題交給了他最信賴的你。
Input
第一行為一個(gè)數(shù)m。
接下來有m組數(shù)據(jù)。每一組的第一行為n,表示這天有n個(gè)小朋友。接下來的n行每行兩個(gè)數(shù),分別表示他現(xiàn)在擁有的積木數(shù)和他一共需要的積木數(shù)。
Output
輸出m行,如果第i天能順利完成所有作品,輸出YES,否則輸出NO。
Sample Input
2
2
2 2
1 3
3
1 5
3 3
0 4
Sample Output
YES
NO
HINT
Source
算法提高
先把自己第一次沒有做對(duì)的貼出來(當(dāng)時(shí)還沒有了解結(jié)構(gòu)體排序),也發(fā)現(xiàn)了沒有做對(duì)的原因;
:
/*
wrong answer
錯(cuò)誤原因:當(dāng)差值相同時(shí)應(yīng)該要先選擁有更多的,
而這種寫法無法實(shí)現(xiàn),學(xué)長指導(dǎo)說應(yīng)該用結(jié)構(gòu)體排序
*/
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[10000],b[10000],c[10000],d[10000];
int main()
{int m;scanf("%d",&m);while(m--){int n;scanf("%d",&n);for(int i = 0; i < n; i++){scanf("%d%d",&a[i],&b[i]);c[i] = b[i] - a[i];d[i] = c[i];}sort(d,d+n);int num = 0,x = 0;for(int k = 0; k < n; k++){for(int j = 0; j < n; j++){if(c[j] == d[k]){if((num + a[j]) >= b[j]){x++;num += a[j];}else goto Flag;}}}Flag:;if(x == n) printf("YES\n");else printf("NO\n");}
return 0;
}
/*Accepted**進(jìn)入正題結(jié)構(gòu)體排序**
*/#include <stdio.h>
#include <algorithm>
using namespace std;
struct Child
{int x;int y;
};
bool cmp(Child p,Child q)
{return p.y<q.y;
}/*結(jié)構(gòu)體排序,y從小到大排序,
如果相等,默認(rèn)按x從大到小排序。
*/
/*
//也可以這樣寫
bool cmp (Child p,Child q)
{if(p.x == q.x)return p.x > q.x;elsereturn p.y < q.y;
}
*/
int main()
{int m;scanf("%d",&m);while(m--){int n;scanf("%d",&n);Child date[n+2];for(int i = 0; i < n; i++){int a,b;scanf("%d%d",&a,&b);date[i].x = a;date[i].y = b-a;}sort(date,date+n,cmp);int num = 0,sum = 0;for(int j = 0; j < n; j++){if(num >= date[j].y){num += date[j].x;sum++;}else break;}if(sum == n) printf("YES\n");else printf("NO\n");}return 0;
}
總結(jié)
以上是生活随笔為你收集整理的还是贪心(结构体排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。