演算法與解題技巧
by 建國中學 張均豪 賴昭勳
解題基本介紹
演算法是什麼?
解決一種問題的方法
基本實作例題
輸入兩個點,輸出他們的距離
數學公式代下去
找到一個陣列的最大值
3n + 1 問題
給一個整數\(n\)
如果是偶數的話就除2
如果是奇數的話就乘以3然後加1
輸出總共幾次之後那個數字會變成 1
輸出 1~n 的所有質數
用迴圈+條件判斷
int n;
cin >> n;
for (int i = 2;i <= n;i++) {
bool isprime = true;
for (int j = 2;j < n;j++) {
if (n % j == 0) {
isprime = false;
break;
}
}
if (isprime) {
cout << i << endl;
}
}
執行效率?
電腦也沒有你想像的那麼快
\(3 * 10^8\) 次操作 / 秒還不夠用?
時間複雜度?
運算次數和問題大小的關係
想法題目例題
Google Codejam 2020 Qualification Round - Nesting Depth
CF 1389 A
LCM Problem
CF 1392 A
Omkar and Password
欣賞難題囉
TIOJ 1777
AtCoder Beginner Contest 174-D
Alter Altar
#include <iostream>
using namespace std;
int main () {
int n;
cin >> n;
int a[n];
int zeronum = 0;
for (int i = 0;i < n;i++) {
char c;
cin >> c;
if (c == 'R') {
a[i] = 0;
zeronum += 1;
} else {
a[i] = 1;
}
}
int zeros = 0, ones = 0;
int ans = 10000000;
for (int i = 0;i <= n;i++) {
int m = 0;
if (zeronum - zeros > ones) {
m = zeronum - zeros;
} else {
m = ones;
}
if (m < ans) {
ans = m;
}
if (i < n) {
if (a[i] == 0) {
zeros += 1;
} else {
ones += 1;
}
}
}
cout << ans << endl;
}
謝謝大家的聆聽
演算法與解題技巧 (社團)
By justinlai2003
演算法與解題技巧 (社團)
- 753