Problem Description
有一张 n 个点的完全无向图,点的标号是 1…n,其中边 (i,j)的长度是 i(xor)j,现在你需要求出点 1 到点 n 的最短路的长度。
Input
第一行一个正整数 T 表示数据组数 1<= T<= 100
对于每组数据:第一行一个正整数 nn 表示点数 (2<= n<= 105)
Output
输出 T 行,每行一个整数表示点 1到点 n 的最短路
Sample Input
1
3
Sample Output
2
这是一道找规律的题,一开始我是用普通的Dijkstra算法做的,但最后发现数组范围过大,导致内存超限。然后这个代码举了一些数据发现一个规律:就是如果点的个数为奇数时,最短路是点的个数 - 1;如果是偶数,则是点的个数 +1。
AC Code
#include<stdio.h>
int main(){
int T,i,j,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
if(n&1)
printf("%d\n",n-1);
else
printf("%d\n",n+1);
}
return 0;
}
至于这样做的原因,我也不知道是为什么……