2023牛客多校第七场 - C M
比赛地址:传送门
赛时过了 2 题,菜死了
C 思维签到题
M 思维签到题
C Beautiful Sequence - 还在理解
题意
你需要求出字典序第 k 小的长度为 n 的非递减序列 $A = (A_1, A_2, ..., A_n) $,满足:
- 对于每一个 \(A_i (1 \le i \le n)\),\(0 \le A_i < 2^{30}\)
- 对于每一个 \(1 \le i < n\) 都满足 \(A_i \oplus A_{i + 1} = B_i\),其中 B 为给定序列
思路
详见代码。。。
代码
//>>>Qiansui
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define mem(x,y) memset(x, y, sizeof(x))
#define debug(x) cout << #x << " = " << x << '\n'
#define debug2(x,y) cout << #x << " = " << x << " " << #y << " = "<< y << '\n'
//#define int long long
using namespace std;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<ull, ull> pull;
typedef pair<double, double> pdd;
/*
*/
const int maxm = 2e5 + 5, inf = 0x3f3f3f3f, mod = 998244353;
void solve(){
int n, k;
cin >> n >> k;
vector<int> b(n);
vector<bool> changed(30, 0); //判断每个位是否被锁定
bitset<30> cur, f; //当前数, 一开始的数
bool ok = true;
for(int i = 0; i < n - 1; ++ i){
cin >> b[i];
if(b[i] == 0) continue;
else{
int lg = log2(b[i]); //b[i]的最高位 1
if(cur[lg] != 0){ //前面的b[i]决定当前位为 1
if(!changed[lg]){ //当前位未改变过
cur[lg] = 0;
f[lg] = 1;
}else{ //再次遇到当前位需要改变
ok = false;
}
}
changed[lg] = 1;
}
cur ^= b[i];
}
int num = 0;
for(int i = 0; i < 30; ++ i){
if(!changed[i]) ++ num;
}
if(!ok || ok && (1 << num) < k) cout << "-1\n";
else{
int st = 0;
-- k;
for(int i = 29; i >= 0; -- i){
if(!changed[i]){
if(k >= (1 << (-- num))){
k -= (1 << num);
st += 1 << i;
}
}else{
if(f[i]) st += (1 << i);
}
}
cout << st << ' ';
for(int i = 0; i < n - 1; ++ i){
cout << (st ^ b[i]) << " \n"[i == n - 2];
st ^= b[i];
}
}
return ;
}
signed main(){
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int _ = 1;
cin >> _;
while(_ --){
solve();
}
return 0;
}
M Writing Books
思路
模拟题意,累加就行了
代码
void solve(){
ll n, ans = 0;
cin >> n;
for(ll i = 1, ed = 10, st = 1; 1; ++ i){
if(st > n) break;
ans += (min(ed - 1, n) - st + 1) * i;
ed *= 10; st *= 10;
}
cout << ans << '\n';
return ;
}
本文来自博客园,作者:Qiansui,转载请注明原文链接:https://www.cnblogs.com/Qiansui/p/17611906.html

浙公网安备 33010602011771号