题意:从一点到另一点,前t秒的风向与t秒后风向不同,问到另一点的最短时间
挺难的,做不出来,又参考了别人的代码。先得到终点指向起点的向量,设T秒钟能到。如果T>t则受风1作用t秒,风2作用T-t秒,否则只受风1作用t秒。风作用对向量的影响加到向量上。如果该向量长度小于(船速*T)^2的话,说明T秒能到。T实际上用low和high的mid得出,如果T秒可行,则提高下限。
乱码:
//#pragma comment(linker,"/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<vector> #include<cmath> #include<queue> #include<stack> #include<map> #include<set> #include<algorithm> #include <stack> #include <ctime> #include <iomanip> using namespace std; const int SZ=1000010,INF=0x7FFFFFFF; void sort(vector<int> &vct,int lo,int hi) { if(lo>=hi)return; int i=lo,j=hi-1; int pivot=rand()%(hi-lo)+lo; //cout<<lo<<" "<<hi<<" "<<pivot<<endl; int val=vct[pivot]; for(;i<j;) { for(;i<j&&j>pivot;--j) { if(abs(vct[j])<abs(vct[pivot])) { swap(vct[j],vct[pivot]); pivot=j; break; } } for(;i<j&&i<pivot;++i) { if(abs(vct[i])>abs(vct[pivot])) { swap(vct[i],vct[pivot]); pivot=i; break; } } } //cout<<pivot<<endl; //cout<<vct[0]<<" "<<vct[1]<<" "<<vct[2]<<" "<<vct[3]<<endl; sort(vct,lo,pivot); sort(vct,pivot+1,hi); } int main() { std::ios::sync_with_stdio(0); //freopen("d:\\1.txt","r",stdin); int n; for(;cin>>n,n;) { vector<int> vct(n); for(int i=0;i<n;++i) { cin>>vct[i]; } sort(vct,0,vct.size()); for(int i=n-1;i>=0;--i) { if(i!=n-1)cout<<" "; cout<<vct[i]; } cout<<endl; } return 0; }