P1056排坐椅
这是2008普及组真题,是一个提高—的模拟。
仔细读完题便有了思路:累放在i行能隔开wi个,比较排序wi,输出即可。所以在这里遇到了结构体排序的问题与手写cmp的问题。对于两个语法知识掌握得都不好,所以造成了死循环或者......(迄今仍然不知道错在了哪里),所以wa1,wa2,wa3..蓝瘦,希望洛谷的大佬可以帮帮我。
1.熟练掌握struct &sort语法
2.尽量不开二维数组
3.要把问题转化到最简单的求解形式(比如x1==x2而非mp[x1+1]=mp[x1])
代码:
#include<iostream> #include<algorithm> using namespace std; struct node { int num,sum; }hang[1005],lie[1005]; bool cmp(node x,node y) { return x.sum>y.sum; } bool cmp1(node x,node y) { return x.num<y.num; } int m,n; int d,k,l,x1,x2,y1,y2; int main() { cin>>m>>n>>k>>l>>d; for(int i=1;i<=d;i++) { cin>>x1>>y1>>x2>>y2; if(x1==x2) { lie[min(y1,y2)].num=min(y1,y2); lie[min(y1,y2)].sum++; } else { hang[min(x1,x2)].num=min(x1,x2); hang[min(x1,x2)].sum++; } } sort(lie+1,lie+n+1,cmp); sort(hang+1,hang+m+1,cmp); sort(lie+1,lie+l+1,cmp1); sort(hang+1,hang+k+1,cmp1); for(int i=1;i<=k;i++) cout<<hang[i].num<<" "; cout<<endl; for(int i=1;i<=l;i++) cout<<lie[i].num<<" "; return 0; }
待到oi十一月,我花开后百花杀。