TIOJ 2065:零的安全感

TIOJ 2065:零的安全感


題目大意:輸出一個長度 $\leq 50$ 的字串 $s$,使得 $s$ 經過 SHA-256 加密後連續 $0$ 長度的平方和 $\geq 485$。

解法:很神奇的一題,需要去看比特幣的區塊,首先我們找一個地址滿足條件的區塊,看它的資訊,把 ver, prev_block, mrkl_root, time, bits, nonce 接起來(可能有一些需要調整的小地方),然後進行一次 SHA-256,因為比特幣區塊的地址是進行兩次 SHA-256 得到的,所以只要把進行一次得到的結果轉成字串輸出就可以過了。

$\text{Code:}$

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,popcnt,sse4,abm")
#include <bits/stdc++.h>
using namespace std;

#ifdef WAIMAI
#define debug(HEHE...) cout << "[" << #HEHE << "] : ", dout(HEHE)
void dout() {cout << '\n';}
template<typename T, typename...U>
void dout (T t, U...u) {cout << t << (sizeof... (u) ? ", " : ""), dout (u...);}
#else
#define debug(...) 7122
#endif

#define ll long long
#define Waimai ios::sync_with_stdio(false), cin.tie(0)
#define FOR(x,a,b) for (int x = a, I = b; x <= I; x++)
#define pb emplace_back
#define F first
#define S second

const string s = "bdfea54bdb1d212d7235f8771b441d9653fa64c53d1149ce07a5fd55fd826628";

inline int f(char c) {
    return c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;
}

void solve() {
    for (int i = 0; i < s.size(); i += 2) {
        unsigned char c = 16 * f(s[i]) + f(s[i + 1]);
        cout << c;
    }
}

int main() {
    Waimai;
    solve();
}

我的分享就到這裡結束了,如果喜歡我的 $\text{Blog}$,歡迎追蹤! 

留言

熱門文章