codeforces590b//Chip 'n Dale Rescue Rangers//Codeforces Round #327 (Div. 1)

时间:2023-03-08 18:29:02
codeforces590b//Chip 'n Dale Rescue Rangers//Codeforces Round #327 (Div. 1)

题意:从一点到另一点,前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=,INF=0x7FFFFFFF; void sort(vector<int> &vct,int lo,int hi)
{
if(lo>=hi)return;
int i=lo,j=hi-;
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+,hi);
} int main()
{
std::ios::sync_with_stdio();
//freopen("d:\\1.txt","r",stdin);
int n;
for(;cin>>n,n;)
{
vector<int> vct(n);
for(int i=;i<n;++i)
{
cin>>vct[i];
}
sort(vct,,vct.size());
for(int i=n-;i>=;--i)
{
if(i!=n-)cout<<" ";
cout<<vct[i];
}
cout<<endl;
}
return ;
}