tanning分配防晒霜 bzoj-1707
题目大意:给出每个点所能接受的区间,给出m个可以使单个点固定在一个值的方法,每种方法能使用有限次。
注释:1<=N<=2500
想法:这题是瞎jb写然后A了,看了大佬的证明才知道自己写的贪心是正确的。对于每一个防晒霜来讲,我显然是想让它使用在上界更大的奶牛身上,证明太恶心了,luogu上全都是,自己随意看一下就好了qwq。
最后,附上丑陋的代码... ...
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int ans; struct Node { int l,r; }a[10010]; bool cmp_for_a(Node a,Node b) { return a.r==b.r?a.l<b.l:a.r<b.r; } struct Abcd { int val; int num; }b[10010]; bool cmp_for_b(Abcd a,Abcd b) { return a.val<b.val; } inline bool check(int i,int j) { if(a[i].l<=b[j].val&&a[i].r>=b[j].val&&b[j].num) return true; return false; } int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d%d",&a[i].l,&a[i].r); } for(int i=1;i<=m;i++) { scanf("%d%d",&b[i].val,&b[i].num); } sort(a+1,a+n+1,cmp_for_a); sort(b+1,b+m+1,cmp_for_b); // bool flag; for(int i=1;i<=n;i++) { // flag=false; for(int j=1;j<=m;j++) { if(check(i,j)) { // flag=true; ans++; b[j].num--; break; } } } printf("%d ",ans); return 0; }
小结:贪心题总是很有意思qwq