首页 > 代码库 > HDU 3262 Seat taking up is tough
HDU 3262 Seat taking up is tough
这题其实挺简单,可是自己就是被坑了很长时间,究其原因,脑袋短路了。本来排完序之后,应该把结果按照未排序之前的顺序输出,结果我就直接输出了,而题目给的例子正好是按顺序给的,输出没有问题,哎,果然够坑。以后再也不能相信题目给的例子了。
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<stack> #include<queue> using namespace std; int seat[31][31]; bool visited[31][31]; int m,n,k,feeling,ans_x,ans_y; struct come { int hh,mm,person; int id;//之前就是没有这个,总是WA。 }data[52]; struct result { int x,y; }ans[52]; bool cmp(come a,come b) { if(a.hh==b.hh) return a.mm<b.mm; return a.hh<b.hh; } bool judge(int x,int y,int id) { int k=data[id].person+y; if(k-1>m) return false; for(int i=y;i<k;i++) if(visited[x][i]) return false; return true; } void set_true(int x,int y,int id) { int k=data[id].person+y; for(int i=y;i<k;i++) visited[x][i]=true; } void dfs(int id) { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(visited[i][j]) continue; if(judge(i,j,id)) if(feeling<seat[i][j]) feeling=seat[i][j],ans_x=i,ans_y=j; if((m-j+1)<data[id].person) break; } } } void get_max() { int t=-100000000; ans_x=0,ans_y=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(visited[i][j]==false) if(t<seat[i][j]) t=seat[i][j],ans_x=i,ans_y=j; } int main() { while(scanf("%d%d%d",&n,&m,&k)) { if(n==0&&m==0&&k==0) break; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&seat[i][j]); for(int i=1;i<=k;i++) { scanf("%d:%d %d",&data[i].hh,&data[i].mm,&data[i].person); data[i].id=i; } sort(data+1,data+k+1,cmp); memset(visited,false,sizeof(visited)); for(int i=1;i<=k;i++) { feeling=-100000000,ans_x=0,ans_y=0; dfs(i); if(ans_x!=0) { ans[data[i].id].x=ans_x,ans[data[i].id].y=ans_y; set_true(ans_x,ans_y,i); } else { get_max(); if(ans_x==0) ans[data[i].id].x=-1; else { ans[data[i].id].x=ans_x,ans[data[i].id].y=ans_y; visited[ans_x][ans_y]=true; } } } for(int i=1;i<=k;i++) { if(ans[i].x!=-1) printf("%d %d\n",ans[i].x,ans[i].y); else printf("-1\n"); } } return 0; }
HDU 3262 Seat taking up is tough
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。