Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:讨论区唯一一组wa的数组太长了,看不了,,顺便整理了一下测试数据留在这里以后再来改吧In Reply To:讨论区唯一一组wa的数组太长了,看不了,,顺便整理了一下测试数据留在这里以后再来改吧 Posted by:918106840125 at 2019-07-28 19:56:29 > #include<iostream> > #include<cstdio> > #include<algorithm> > #include<cstring> > #include<map> > using namespace std; > const int maxn=1000+5; > const int inf=0x3f3f3f3f; > map<pair<int,int>,bool>vis; > struct Block{ > int lx,rx,h; > }block[maxn]; > int minleft[maxn],minright[maxn];//minleft[i]表示第i块平台左端掉到地面最少时间,minright同理 > int n,x,y,MAX,t,pos; > bool cmp(Block b1,Block b2) > { > return b1.h>b2.h; > } > int dfs(int k,int p) > { > if(vis[make_pair(k,p)]==1)return min(minleft[k],minright[k]); > if(k==n) > { > int lx=abs(pos-block[n].lx); > int rx=abs(pos-block[n].rx); > if(block[n].h>MAX) minleft[n]=minright[n]=2*inf; > else { > minleft[n]=block[n].h+lx; > minright[n]=block[n].h+rx; > } > return min(minleft[n],minright[n]); > } > int lx=abs(pos-block[k].lx); > int rx=abs(pos-block[k].rx); > int tmpl=-1,tmpr=-1; > for(int i=k+1;i<=n;i++) > { > if(block[i].lx<=block[k].lx&&block[i].rx>=block[k].lx) > { > tmpl=i;break; > } > } > for(int i=k+1;i<=n;i++) > { > if(block[i].lx<=block[k].rx&&block[i].rx>=block[k].rx) > { > tmpr=i;break; > } > } > if((tmpl==-1&&block[k].h>MAX)||(tmpl!=-1&&abs(block[k].h-block[tmpl].h)>MAX)) > minleft[k]=2*inf; > else > { > if(tmpl==-1)minleft[k]=block[k].h+lx; > else > { > pos=block[k].lx; > minleft[k]=dfs(tmpl,pos)+lx+abs(block[k].h-block[tmpl].h); > vis[make_pair(tmpl,block[k].lx)]=1; > } > } > if((tmpr==-1&&block[k].h>MAX)||(tmpr!=-1&&abs(block[k].h-block[tmpr].h)>MAX)) > minright[k]=2*inf; > else > { > if(tmpr==-1)minleft[k]=block[k].h+rx; > else{ > pos=block[k].rx; > minright[k]=dfs(tmpr,pos)+rx+abs(block[k].h-block[tmpr].h); > vis[make_pair(tmpr,block[k].rx)]=1; > } > } > return min(minleft[k],minright[k]); > } > int main() > { > scanf("%d",&t); > while(t--) > { > memset(block,0,sizeof(block)); > scanf("%d%d%d%d",&n,&x,&y,&MAX); > for(int i=1;i<=n;i++) > scanf("%d%d%d",&block[i].lx,&block[i].rx,&block[i].h); > block[0]={x,x,y}; > sort(block+1,block+1+n,cmp); > memset(minleft,0x3f,sizeof(minleft)); > memset(minright,0x3f,sizeof(minright)); > pos=x; > vis.erase(vis.begin(),vis.end()); > printf("%d\n",dfs(0,x)); > } > return 0; > } > /* > 1 > 4 14 5 6 > 3 22 1 > 16 23 2 > 16 30 3 > 13 21 4 > 答案:15 > 1 > 2 2 12 8 > 0 10 10 > 2 12 5 > 答案:22 > 2 > 3 8 7 2 > 6 14 6 > 4 10 4 > 5 14 2 > 1 6 10 20 > 2 3 5 > answer: > 17 10 > > 1 > 3 8 12 8 > 0 10 4 > 0 10 10 > -2 4 6 > > 1 > 10 899 52 50 > 893 903 18 > 890 900 38 > 898 908 8 > 910 920 8 > 894 904 43 > 881 891 18 > 872 882 38 > 867 877 43 > 842 852 43 > 895 905 3 > Ans: > 61 > > 4 > 3 4 4 5 > 3 5 3 > 1 7 2 > 2 6 1 > 3 8 17 20 > 0 10 8 > 0 10 13 > 4 14 3 > 3 4 4 5 > 3 5 3 > 1 4 2 > 2 6 1 > 3 4 4 5 > 3 6 3 > 5 7 2 > 1 4 1 > 答案:14 > 1 > 3 8 17 20 > 8 10 8 > 8 10 13 > 8 14 3 > ans:17 > 以上数据都过了,wa到怀疑人生.... > 这组数据我输出353了,不过是无效数据,太难查了... > 1 > 60 822 302 50 > 813 823 298 > 813 823 293 > 816 826 213 > 816 826 178 > 817 827 218 > 813 823 148 > 821 831 73 > 814 824 248 > 813 823 283 > 815 825 158 > 819 829 58 > 814 824 13 > 813 823 28 > 819 829 233 > 814 824 43 > 773 783 293 > 821 831 93 > 818 828 268 > 816 826 198 > 818 828 113 > 814 824 208 > 816 826 68 > 821 831 133 > 794 804 248 > 814 824 108 > 829 839 28 > 818 828 143 > 844 854 298 > 802 812 133 > 801 811 28 > 818 828 238 > 817 827 8 > 816 826 48 > 820 830 3 > 819 829 288 > 822 832 138 > 820 830 183 > 855 865 13 > 777 787 268 > 820 830 63 > 789 799 28 > 822 832 33 > 855 865 213 > 779 789 208 > 836 846 248 > 806 816 33 > 821 831 263 > 818 828 83 > 846 856 263 > 789 799 68 > 854 864 8 > 854 864 283 > 801 811 298 > 805 815 143 > 822 832 23 > 821 831 173 > 813 823 153 > 858 868 138 > 818 828 98 > 839 849 133 > 答案:352 > */ > > > > > > > > > > Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator