白给题1
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main () { ios::sync_with_stdio(false); cin.tie(0); int t; cin >> t; while(t--) { ll x, y; ll a, b; cin >> x >> y >> a >> b; ll ans = 0; ans = abs(x - y) * a + min(x, y) * min(b, 2 * a); cout << ans << endl; } }
白给题2
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main () { ios::sync_with_stdio(false); cin.tie(0); int t; cin >> t; bool endd = 0; while(t--) { endd = 0; string s; cin >> s; if(s.size() == 1) { cout << s << endl; continue; } //为1的情况 for(int i = 0; i < s.size() - 1; ++i) { if(s[i] != s[i + 1]) { break; } if(i == s.size() - 2) { cout << s << endl; endd = 1; } } if(endd) { continue; } //为2 string ans = ""; for(int i = 0; i < s.size() - 1; ++i) { string str; stringstream stream; stream << s[i]; str = stream.str(); ans += str; if(s[i] == '1' && s[i + 1] == '1') { ans += "0"; } if(s[i] == '0' && s[i + 1] == '0') { ans += "1"; } } string str; stringstream stream; stream << s[s.size() - 1]; str = stream.str(); ans += str; cout << ans << endl; } }
思维题找循环规律
#include <bits/stdc++.h> using namespace std; typedef long long ll; int f[100010]; ll getAns(ll sb, int t) { return f[t - 1] * (sb / t) + f[sb % t]; //利用循环的特性进行求解 } int main () { ios::sync_with_stdio(false); int t; cin >> t; while(t--) { int a, b, q; cin >> a >> b >> q; int temp = a * b; for(int i = 1; i < temp; ++i) { f[i] = f[i - 1]; if(i % a % b != i % b % a) { f[i]++; } } while(q--) { ll l, r; cin >> l >> r; cout << getAns(r, temp) - getAns(l - 1, temp) << " "; } putchar(10); } }
后面的题心情好再更新。。。学计组洋文去了