nowasikib's blog

By nowasikib, 15 years ago, In English

by http://www.acmwiki.com A

水题。模拟。 B

水题,唯一的技巧,把两维的描述写成一维的就简洁了。 关键代码如下: int N,M,K; string a[MAXN]; char name[MAXN]; int main() { freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); scanf("%d%d%d",&N,&M,&K); REP(i,MAXN) a[i]=""; REP(i,K) { char cs[10]; scanf("%s",cs); if(cs[0]=='+') { int x,y;scanf("%d%d%s",&x,&y,name);x--,y--; rep(j,x*M+y,MAXN) if(a[j]=="") { a[j]=string(name);break; } } else { int x=-1,y=-1;scanf("%s",name);string s=string(name); REP(j,N*M) { if(a[j]==s) { a[j]="",x=j/M+1,y=j%M+1; break; } } printf("%d %d\n",x,y); } } return 0; }

C

水题,可以直接算,也可以floodfill。 D

水题。dp和贪心均可。 E by http://www.acmwiki.com 扫描+multiset运用。完整代码如下: #include

include

include

include

using namespace std;

define rep(i,a,b) for(int i=(a);i<(b);i++)

define REP(i,n) rep(i,0,n)

define MAXN 200061

typedef struct node { int x; int h; int f; }node; node a[MAXN]; int N; bool cmp(const node&a,const node &b) { return a.x<b.x; } multiset sh; int geth() { if(sh.empty()) return 0; return (--sh.end()); } int main() { freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); scanf("%d",&N); REP(i,N) { int h,l,r;scanf("%d%d%d",&h,&l,&r); a[2*i].h=h,a[2*i].x=l,a[2*i].f=0; a[2*i+1].h=h,a[2*i+1].x=r,a[2*i+1].f=1; } N=2; sort(a,a+N,cmp); sh.clear(); int pre=0; vector<pair<int,int> >ret; REP(i,N) { int x=a[i].x; while(i<N&&a[i].x==x) { if(a[i].f==0) sh.insert(a[i].h); else sh.erase(sh.find(a[i].h)); i++; } i--; int ed=geth(); if(pre==ed) continue; ret.push_back(make_pair(x,pre)); ret.push_back(make_pair(x,ed)); pre=ed; } printf("%d\n",ret.size()); REP(i,ret.size()) printf("%d %d\n",ret[i].first,ret[i].second); return 0; }

  • Vote: I like it
  • -19
  • Vote: I do not like it