最後更新日期 2024 / 01 / 01

題解 CSES Repetitions

https://cses.fi/problemset/task/1069

題意

你有一個由 A、C、G、T 組成的字串
目標是算出同樣的字母最多連續重複幾次

想法

把整個字串從左邊往右掃
用一個 curLen 變數維護目前的長度
遇到一個字母時 curLen1
如果跟上個字母不同就把 curLen 歸零
每次掃過一個字母再用 maxLen 維護出現過最大的 curLen

程式碼

#include<bits/stdc++.h>
#define int long long
using 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 = max(maxLen, curLen);
		tmp = chr;
	}
	cout << maxLen << endl;
}

推薦文章

題解 CSES Restaurant Customers

給你 n 位客人的進入和離開餐廳的時間 輸出最多同時有幾位客人同時在餐廳- n le 2 times 10^5把每個人加入時間和離開的時間分別看成兩個時間點 並把所有時間點加入陣列後一起排序 然後用一個變數來維護目前餐廳人數 每次遇到加入就增加 反之遇到離開就減少 維護中遇到的最大值就是答案了 時間複雜度:Oncpp using namespace std; signed main { int n; cin n; vectorpii v; for int i = 0; i n; i++ { int s, t; cin s t; v.pushback{s, true}; v.pushback{t, false}; } sortv.begin, v.end; int cur = 0; int ans = 0; for auto e : v { if e.ss == true cur++; else cur--; ans = maxcur, ans; } cout ans endl;}

CSES

題解 CSES Missing Number

給予一堆數字 1 sim n 但中間缺少了一個 你的任務是找出那個缺少的數字已知數字 1 sim n 的總和為 sum^n{k=1}k 可以透過梯形公式 frac{n1 + n}{2} 快速求出來 所以我們只要用期望的 1 sim n 總和減掉輸入的所有數字就可以算出答案了cppusing namespace std; main { iosbase::syncwithstdiofalse;cin.tie0; 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;}

CSES

題解 CSES Increasing Array

給你一個陣列 每次修改可以讓任何一個元素的值加一 最少需要修改幾次才能讓整個陣列變成非嚴格遞增的從陣列左邊往右邊掃過去 遇到凹洞就把它填滿 計算總共需要花多少成本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