日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces Round #596 (Div. 2)(第三场)

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Round #596 (Div. 2)(第三场) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Preface

我要開始打Codeforces了,這是我的第三場比賽,本來以為可以快速上分的,誰知在pupil的路上越走越遠。

本場戰績:
Cost Time: 2 hours
Solved: 1.5
Rank: 3023
Rating: -31

Question

A. Forgetting Things
題目大意:輸入小于10的正整數a和b,輸出任意分別以a和b開頭的兩個連續整數,如果不存在這樣的數,則輸出"-1"。
解法:可以發現只有當aaa等于bbb,當a+1a + 1a+1等于bbb以及當aaa等于999bbb等于111這三種情況下可以找到答案。

#include <bits/stdc++.h>using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; const int maxn = 2e5 +10; int a, b; /** 省略了快讀和快寫*/ int main() {read(a) ,read(b);if (a == b) {cout << a * 10 + 1 << " " << b * 10 + 2 << endl;} else if (a + 1 == b) {cout << a * 10 + 9 << " " << b * 10 << endl;} else if(a == 9 && b == 1) {cout << a * 10 + 9 << " " << b * 100 << endl;} else {writeln(-1);}return 0; }

B. TV Subscriptions
題目大意:有n天,每天電視臺都播放著編號為ai(1≤ai≤k)a_i(1 \leq a_i \leq k)ai?(1ai?k)的節目,現在要求至少要訂閱多少個節目才能使連續ddd天有節目看?

解法:用一個長度為ddd的區間去掃描記錄節目的數組,同時維護一個記錄區間節目數的變量,掃描完即可得到最小的節目數。

#include <bits/stdc++.h>using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; const int maxn = 2e5 +10; const int N = 1e6 + 10; int T, n, k, d; int a[maxn], vis[N]; /** 省略了快讀和快寫*/ int main() {read(T);while(T--) {read(n); read(k); read(d);for (int i = 1; i <= n; i++) {read(a[i]);vis[a[i]] = 0;}int ans = inf, t = 0;for (int i = 1; i <= d; i++) {if (!vis[a[i]]) t++;vis[a[i]]++;}ans = min(ans, t);for (int i = d + 1; i <= n; i++) {vis[a[i - d]]--;if (!vis[a[i - d]]) t--;if (!vis[a[i]]) t++;vis[a[i]]++;ans = min(ans, t);}writeln(ans);}return 0; }

C. p-binary
題目大意:給定n和p的值,求出最小的k值,可以使得n=∑i=1k(2xi+p)n= \sum^k_{i=1}(2^{x_i}+p)n=i=1k?(2xi?+p)成立。
解法:上式可轉化為:
n?k?p=∑i=1k2xin-k*p= \sum^k_{i=1}2^{x_i}n?k?p=i=1k?2xi?
t=n?k?pt=n-k*pt=n?k?p,由二進制轉十進制的“位權法”,我們可以想到考慮 ttt 的二進制表示。

  • ttt 的二進制數中1的個數大于 kkk 時, kkk 不符合條件。
  • ttt 的二進制數中1的個數小于或等于 kkk 時,我們可以通過分解使得 2xi2^{x_i}2xi? 的個數等于 kkk。(比如25=24+x42^5=2^4+x^425=24+x4)。
  • 于是,我們就可以從小到大遍歷 kkk 的值,最先找到答案便是我們要找的。注意:當出現 t<kt < kt<k這種情況時,說明不存在滿足條件的 kkk 值。

    關于 kkk 的上限,由上述可知,當 cal(n?k?p)≤kcal(n-k*p) \leq kcal(n?k?p)k 就會得到結果,而 n≤109,?1000≤p≤1000n \leq 10^9,-1000\leq p \leq 1000n109,?1000p1000 ,所以 kkk 的值必定不會超過31。

    /*** Author: Veggie*/ #include <bits/stdc++.h>using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; const int maxn = 2e5 +10; int a, b; /** 省略了快讀和快寫*/ int cal(int x) {int cnt = 0;while (x) {if (x & 1) cnt ++;x >>= 1;}return cnt; }int main() {read(a), read(b);int t;for (int k = 1; k < 32; k++) {t = a - k * b;if (t < k) break;if (cal(t) <= k) {writeln(k);return 0;}}writeln(-1);return 0; }

    Rating View

    總結

    以上是生活随笔為你收集整理的Codeforces Round #596 (Div. 2)(第三场)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。