整点沙雕乐呵乐呵。
Small
开头是 #include
,如果猜下一个是 <
的话对不上自闭了好一会儿,然后发现下一个是空格。
然后可以再写个打表程序,把已知的对应关系写上去替换掉,然后就能猜猜推推搞出来了。
但是中间还有个二元运算符不知道是啥,暴力测测样例就出来了。
Large
开头是 #include
...个鬼啊,连相等字符都不一样,自闭了好一会儿。
然后从后面看,看上去还是正常的 }
}
,有了换行符就好办了,对比一下等价字符就可以知道哪里是 int main(){
和 #include
了,还可以发现第一行是坑人的 /*...*/
注释。
然后同样的方法可以猜出主程序部分,因为有些字符只在变量名出现所以猜不出来,但没有关系,可以随便填一个。
结果发现开头是个大表,你只知道 (0,1) 是哪个。一种方法是枚举 (2-9) 的全排列代入验样例,但感觉很麻烦,实际上可以根据样例解异或方程组,出题人很良心所以系数矩阵满秩,可以直接算出整个表。
#include<bits/stdc++.h>
using namespace std;
const int N = 1000, _[]={293309062,96701749,694916487,371591203,450903345,936470975,360036365,596019536,362870120,978299587,72615453,677215478,297218049,296795024,703206614,117310233,243106488,303113802,602459530,151925105,47183452,590812021,886995042,967943647,1040249104,802320701,554202194,839697519,607415572,770010993};
template<typename T>
void rd(T &x){
int ch = getchar(); x = 0; bool f = false;
for(;ch < '0' || ch > '9';ch = getchar()) f |= ch == '-';
for(;ch >= '0' && ch <= '9';ch = getchar()) x = x * 10 + ch - '0';
if(f) x = -x;
}
int T, n, a[N], res;
int main(){
rd(T);
if(T == 1){
rd(n);
for(int i = 1;i <= n;++ i) rd(a[i]);
for(int i = 1;i <= n;++ i)
for(int j = i+1;j <= n;++ j)
if(a[i] > a[j]) res += i ^ j;
printf("%d
", res);
} else {
rd(T);
while(T --){
rd(n); res = 0;
for(int i = 0;i < 30;++ i)
if(n>>i&1) res ^= _[i];
printf("%d
", res);
}
}
}