AtCoder ABC-305
這是我第一次在AtCoder解題,老實說這不是我第一次參加XD,但第一場Register之後就忘記時間上去寫😥
不過這一次我有記得x) 晚了大概半小時左右
但我還是把我會解的都解一解了QQ
我的能力現在只會兩題
pA - Water Station
題目敘述:
總長的馬拉松跑道。每出現一個補給站
給定一,你要求出距離最近的補給站。
想法:
這題我們可以很快的就聯想出 5的倍數
所以我們就用簡單的判斷式就可以求出來了
CODE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <iostream> using namespace std;
signed main(void) { int n; cin >> n; if (n % 5 == 0) { cout << n << "\n"; } else { if(n%5 == 1) { n=n-1; cout << n << "\n"; } if(n% 5 ==2) { n=n-2; cout << n << "\n"; } if(n % 5 == 3) { n=n+2; cout << n << "\n"; } if(n % 5 == 4) { n+=1; cout << n << "\n"; } } }
|
但其實,我們可以再做一下優化:
從2個測資看一下
INPUT:
21
OUTPUT:
20
INPUT:
53
OUTPUT:
55
就可以推出: 如果餘數大於3,就是除以五再乘上五加上五 否則 除以五再乘上五
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <iostream> using namespace std;
signed main(void) { int n; cin >> n;
if(n%5 >= 3) { cout << n/5*5+5 << "\n"; } else { cout << n/5*5 << "\n"; } }
|
這樣會看起來更好讀,我也是在結束後看別人的程式碼才知道有這種想法的ww
pB - ABCDEFG
題目敘述:
有一段數線,上面有7個點
每個點到點的距離不同:
給定兩個點位求兩點位距離
範例測資:
INPUT:
A C
OUTPUT:
4
想法:
我先開map存放每個點相鄰的間距,在開一個unordered_map存放的下一個點
然後去判斷有沒有相鄰
有的話就輕鬆輸出
沒有的話
先判斷是否正向(依照字母順序)
在用迴圈下去跑:用我們存放的間距還有的下一個點去計算距離 然後輸出
CODE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #include <bits/stdc++.h> using namespace std;
signed main() { ios::sync_with_stdio(0); cin.tie(0); map<string, int> distances = { {"AB", 3}, {"BC", 1}, {"CD", 4}, {"DE", 1}, {"EF", 5}, {"FG", 9} }; unordered_map<string, string> nextPoints = { {"A", "B"}, {"B", "C"}, {"C", "D"}, {"D", "E"}, {"E", "F"}, {"F", "G"} }; string p, q; cin >> p >> q; int distance = 0; string current = p; if (p + q == "AB" || p + q == "BC" || p + q == "CD" || p + q == "DE" || p + q == "EF" || p + q == "FG") { cout << distances[p + q] << "\n"; } else { if(p > q) { swap(p,q); current = p; } while (current != q) { string next = nextPoints[current]; distance += distances[current + next]; current = next; } cout << distance << "\n"; } }
|
賽後跟 士育 討論這題,他只用了很簡單的解法就過了xD
我把這題搞得很複雜x)
他的CODE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
#include<bits/stdc++.h> #define int long long #define IO ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); using namespace std;
signed main() { IO; char c[7]={'A','B','C','D','E','F','G'},p,q; int d[6]={3,1,4,1,5,9},a,b,ans=0; cin >> p >> q; for(int i=0;i<7;i++) { if(c[i] == p) a = i; if(c[i] == q) b = i; } if(a > b) swap(a,b); for(int i=a;i<b;i++) ans += d[i]; cout << ans << "\n"; }
|
以上就是我這次解出的兩題
希望自己能夠更進步QQ
不管在Codeforces Div.3 還是 ABC 都能夠至少解出3題以上!