python使用matplotlib繪製折線圖的示例程式碼
阿新 • • 發佈:2020-09-23
比賽連結:http://codeforces.com/contest/1419
A題
題意:
簡單博弈論。運用數學知識分析出規律:如果總數是奇數時,最後剩下的一定是位置為奇數位置對應的值。(如果想不明白建議模擬一下過程)在這種情況下,Raze可以選擇剩下哪一個,所以如果存在奇數位置存在數為奇數,Raze一定獲勝,否則失敗。同理,如果總數是偶數,最後剩下位置一定是偶數位置對應的值。在這種情況下,Breach可以選擇剩下哪一個,所以如果存在偶數位置存在數為偶數,Breach一定獲勝,否則失敗。
#include <bits/stdc++.h> using namespace std; int main () { int t; cin >> t; while(t--) { int n; cin >> n; int odd = 0, even = 0; string s; cin >> s; bool ok; if(n & 1) { ok = 0; for(int i = 0; i < s.size(); i += 2) { int num = s[i] - 0; if(num & 1) { ok = 1; break; } } } else { ok = 1; for(int i = 1; i < s.size(); i += 2) { int num = s[i] - 0; if(!(num & 1)) { ok = 0; break; } } } if(ok) { cout << "1" << endl; } else { cout << "2" << endl; } } }
B題
是一個數學規律尋找題。要求得到完美的圖。由數學分析能力可以看出如下規律。1 3 7。。。。階是完美的。相鄰值相差為2, 2^2, 2^3.....通過這個規律先打表然後判斷有多少個滿足。
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main () { int t; cin >> t; vector<ll> biao; ll num = 1; ll j = 1; for(ll i = 0; i <= 1e18; ) { i += (num + 1) * num / 2; num += pow(2, j); j += 1; biao.push_back(i); } // for(int i = 0; i < biao.size(); ++i) { // cout << biao[i] << " "; // } // putchar(10); while(t--) { ll n; cin >> n; int ans = 0; for(int i = 0; biao[i] <= n; ++i) { ans++; } cout << ans << endl; } }
C題
思維題
如果全部值一樣且跟目標值一樣則0次;如果存在一個值與目標值一樣或者正負相等則1次;其餘情況兩次
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main () { int t; cin >> t; for(int i = 0; i < t; ++i) { int n, x; cin >> n >> x; vector<int> v; int zheng = 0; int fu = 0; bool sb = 0; for(int i = 0; i < n; ++i) { int temp; cin >> temp; v.push_back(temp); if(temp > x) { zheng += temp - x; } else { fu += x - temp; } if(temp == x) { sb = 1; } } if(zheng == 0 && fu == 0) { cout << 0 << endl; } else if(zheng == fu || sb) { cout << 1 << endl; } else { cout << 2 << endl; } } }
D題
憨批題 大的插奇數位置,小的插偶數位置。數量(n-1)/2
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main () { int n; cin >> n; vector<ll> v; vector<ll> ans; // v.resize(n); ans.resize(n + 10); for(int i = 0; i < n; ++i) { ll temp; cin >> temp; v.push_back(temp); } sort(v.begin(), v.end()); // for(int i = 0; i < n; ++i) { // cout << v[i] << " "; // } // cout <<endl; int maxx = n - 1; for(int i = 0; i < n; i += 2) { ans[i] = v[maxx--]; } int tt = 0; for(int i = 1; i < n; i += 2){ ans[i] = v[tt++]; } cout << (n - 1) / 2 << endl; for(int i = 0; i < n; ++i) { cout << ans[i] << " "; } cout << endl; }