最後更新日期 2024 / 01 / 01
https://cses.fi/problemset/task/1083/
給予一堆數字
你的任務是找出那個缺少的數字
已知數字
可以透過梯形公式
所以我們只要用期望的
#include <bits/stdc++.h>
#define int long long
using namespace std;
main() {
ios_base::sync_with_stdio(false);cin.tie(0);
int n, sum = 0;
cin >> n;
for (int i = 0; i < n-1; i++) {
int tmp;
cin >> tmp;
sum += tmp;
}
cout << ((1 + n) * n) / 2 - sum << endl;
}
你有一個由 A、C、G、T 組成的字串 目標是算出同樣的字母最多連續重複幾次把整個字串從左邊往右掃 用一個 curLen 變數維護目前的長度 遇到一個字母時 curLen 加 1 如果跟上個字母不同就把 curLen 歸零 每次掃過一個字母再用 maxLen 維護出現過最大的 curLencppusing namespace std;signed main { char chr, tmp = 'X'; int maxLen = 1, curLen = 1; while cin chr { if tmp = 'X' tmp == chr { curLen++; } else { curLen = 1; } maxLen = maxmaxLen, curLen; tmp = chr; } cout maxLen endl;}
CSES給你一個陣列 每次修改可以讓任何一個元素的值加一 最少需要修改幾次才能讓整個陣列變成非嚴格遞增的從陣列左邊往右邊掃過去 遇到凹洞就把它填滿 計算總共需要花多少成本cppusing namespace std;main { iosbase::syncwithstdiofalse;cin.tie0; int n; cin n; int ans = 0; vectorint vecn; for int i = 0; i n; i++ { cin veci; } for int i = 1; i n; i++ { if veci-1 veci { ans += veci-1 - veci; veci = veci-1; } } cout ans;}
CSES找到兩個數字 使得兩數的最大公因數盡量大可以把題目想成 找到最大的 x 使得陣列中出現至少兩個他的倍數 於是我們可以先用 cnt 陣列紀錄每個數字的出現次數 然後枚舉每個可能的因數 假設目前枚舉到 k 從 k、2k、3k dots 計算陣列中存在多少個倍數 根據調和級數.harmonic-series可以算出時間複雜度為 On log ncppconst int maxn = 1e6 + 10;int cntmaxn;signed main { int n; cin n; vectorint vn; for int i = 0; i n; i++ { cin vi; cntvi++; } for int k = maxn; k 0; k-- { int cur = 0; for int j = k; j maxn; j += k { cur += cntj; } if cur = 2 { cout k endl; return 0; } }}
CSES