zoukankan      html  css  js  c++  java
  • UOJ524【美团杯2020】程序解密【puzzles】

    整点沙雕乐呵乐呵。

    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);
    		}
    	}
    }
    
  • 相关阅读:
    oracle去除字符串中间的空格
    java代理模式
    js方法中的this
    js中访问对象的方法
    Hadoop学习笔记
    查看电脑硬件常用命令
    Ubuntu18.0.4配置Hadoop1.2.1环境
    Entwurfsmuster
    WEB Front-end Development Technology
    Objekt Orientierte Programmierung C++
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/14933359.html
Copyright © 2011-2022 走看看