# TJPC 11th 測機題解 ## PA - 磚頭 ### 首殺: wonderhoi 全部加起來就好 因為出題者很壞,a+b+c會超出int的範圍,要開long long才夠 ```cpp= #include<bits/stdc++.h> using namespace std; int main(){ long long a , b , c; cin >> a >> b >> c; cout << a + b + c << '\n'; } ``` ## PB - 你電到我了 ### 首殺: wonderhoi 因為輸入的人名會含有空白,所以用getline輸入然後照題目輸出即可 ```cpp= #include<bits/stdc++.h> using namespace std; int main(){ string a; getline( cin , a ); cout << "Hello world, " << a << "!" << '\n'; } ``` ## PC - 西格瑪 ### 首殺: asdfg1021 題目要你找1~k中沒有出現在A數列裡的數字平方和 先開一個bool陣列判斷從1~k中的數字那些有出現 因為bool沒辦法開到$10^{18}$,且題目只求1~k 所以只要紀錄A數列裡<=k的數即可,其他就不用管他了 *因為出題者很壞,14行的i\*i會超出int的範圍,在開變數時記得開long long ```cpp= #include<bits/stdc++.h> using namespace std; bool b[3000010] = {0}; int main(){ long long n , k , a , ans = 0; cin >> n >> k; for( int i = 0 ; i < n ; i++ ){ cin >> a; if( a <= k ) b[a] = 1; } for( long long i = 1 ; i <= k ; i++ ){ if( b[i] == 0 ){ ans += i*i; } } cout << ans << '\n'; } ``` ## PD - 王子Dray ### 首殺: asdfg1021 梗題 思考一下就會發現用最多的質數 = 用到的質數最小 最小的偶數質數是2 最小的奇數質數是3 可以推斷某數A = 2\*n + 3 或 2\*n 例如: 100 = 2 \* 50 、 101 = 2 \* 49 + 3 \* 1 、 102 = 2 \* 51 輸入100輸出50、入101輸出50(49+1)、輸入102輸出51 記得開long long,輸入會到 $10^{18}$ ```cpp= #include<bits/stdc++.h> using namespace std; int main(){ long long n; cin >> n; cout << n/2 << '\n'; } ``` ## PE - 溫度換算 ### 首殺: asdfg1021 照題意變動n與m,然後找n跟m的最大公因數把他們約分 因為n跟m的最大公因數有可能會<0,要記得加一個絕對值給他 ```cpp= #include <bits/stdc++.h> using namespace std; int main() { int a , b; cin >> a >> b; a -= 32*b; a *= 5; b *= 9; int g = abs( __gcd( a , b ) ); cout << a / g << '/' << b / g << '\n'; } ``` * **UPD by Blame 2024/08/13** **C++內建 __gcd()出來會是負數的,但是gcd()會是正數** ## BONUS :::spoiler **GPT** ```cpp= #include <iostream> #include <cmath> // for abs function using namespace std; // 辗转相除法计算最大公约数 long long gcd(long long a, long long b) { while (b) { a %= b; swap(a, b); } return a; } int main() { long long N, M; cin >> N >> M; // 计算摄氏温度的分子和分母 long long numerator = 5 * (N - 32 * M); long long denominator = 9 * M; // 化简分数 long long divisor = gcd(abs(numerator), abs(denominator)); numerator /= divisor; denominator /= divisor; // 输出结果 if (denominator == 1) { cout << numerator << "/1" << endl; } else { cout << numerator << "/" << denominator << endl; } return 0; } ``` ::: :::spoiler **Last AC** ![image](https://hackmd.io/_uploads/Syen2_u5R.png) :::