NC205088. 牛妹游历城市
描述
最近,牛妹天天宅在家里,真是憋死人了。他决定出去旅游。
输入描述
本题有多组数据。第一行,输入一个数T,表示数据组数。接下来2*T行,先输入一个数n,再输入n个数,第i个数表示。
输出描述
对于每组数据,输出最小的行走距离。如果无法从1号点到达n号点,则输出“Impossible”(不含引号)。
示例1
输入:
2 6 2 3 5 8 13 21 12 1 2 3 4 5 6 7 8 9 10 11 12
输出:
3 5
示例2
输入:
5 3 1 2 3 4 177 188 199 211 2 1 2 4 1 1 1 1 5 1 2 4 8 16
输出:
1 1 Impossible 1 Impossible
C++11(clang++ 3.9) 解法, 执行用时: 173ms, 内存消耗: 496K, 提交时间: 2020-08-15 10:50:14
#include<bits/stdc++.h> using namespace std; int main() { int i,j,n,T; long long x,one=1,t,Min[35]; scanf("%d",&T); while(T--) { scanf("%d",&n); t=0,memset(Min,0x3f,sizeof(Min)); for(i=0;i<n;i++) { scanf("%lld",&x); if(i)t=1e18; for(j=0;j<32;j++)if((one<<j)&x)t=min(t,Min[j]+(one<<j)); for(j=0;j<32;j++)if((one<<j)&x)Min[j]=min(Min[j],t); } if(t==1e18)printf("Impossible\n"); else printf("%lld\n",t); } return 0; }