2022 CSP-J复赛题
乘方
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{ll a,b;cin>>a>>b;if(a==1){cout<<1<<endl;return 0;}ll res=1;for(int i=0;i<b;i++){res *=a;if(res>1e9){cout<<-1<<endl;return 0;}}cout<<res<<endl;return 0;
}
解密
#include <bits/stdc++.h>
using namespace std;typedef long long ll;int main() {ios::sync_with_stdio(false);cin.tie(0);int k;cin >> k;while (k--) {ll n, e, d;cin >> n >> e >> d;ll m = n - e * d + 2; ll delta = m * m - 4 * n;if (delta < 0) { cout << "NO\n";continue;}ll sqrt_delta = sqrt(delta); if (sqrt_delta * sqrt_delta != delta) {cout << "NO\n";continue;}if ((m - sqrt_delta) % 2 != 0) { cout << "NO\n";continue;}ll p = (m - sqrt_delta) / 2;ll q = (m + sqrt_delta) / 2;if (p * q == n && p <= q) { cout << p << " " << q << "\n";} else {cout << "NO\n";}}return 0;
}
逻辑表达式
#include <bits/stdc++.h>
using namespace std;string s;
int idx;
int ans1, ans2; bool calc() {bool res = false; bool has_val = false; int i = idx;while (idx < s.size() && s[idx] != ')') {if (s[idx] == '(') {idx++; // 跳过'('bool val = calc(); idx++; // 跳过')'if (!has_val) {res = val;has_val = true;} else if (res == 1 && s[i] == '|') {ans2++;int cnt = 0;while (idx < s.size()) {if (s[idx] == '(') cnt++;else if (s[idx] == ')') {if (cnt == 0) break;cnt--;} else if (cnt == 0 && s[idx] == '|') {ans2++; } else if (cnt == 0 && s[idx] == '&') {break; }idx++;}} else if (res == 0 && s[i] == '&') {ans1++;int cnt = 0;while (idx < s.size()) {if (s[idx] == '(') cnt++;else if (s[idx] == ')') {if (cnt == 0) break;cnt--;} else if (cnt == 0 && s[idx] == '&') {ans1++; } else if (cnt == 0 && s[idx] == '|') {break; }idx++;}} else {// 正常计算if (s[i] == '&') res &= val;else res |= val;}i = idx; } else if (s[idx] == '0' || s[idx] == '1') {bool val = (s[idx] == '1');idx++;if (!has_val) {res = val;has_val = true;} else if (res == 1 && s[i] == '|') {ans2++;int cnt = 0;while (idx < s.size()) {if (s[idx] == '(') cnt++;else if (s[idx] == ')') {if (cnt == 0) break;cnt--;} else if (cnt == 0 && s[idx] == '|') {ans2++; } else if (cnt == 0 && s[idx] == '&') {break; }idx++;}} else if (res == 0 && s[i] == '&') {ans1++;int cnt = 0;while (idx < s.size()) {if (s[idx] == '(') cnt++;else if (s[idx] == ')') {if (cnt == 0) break;cnt--;} else if (cnt == 0 && s[idx] == '&') {ans1++; } else if (cnt == 0 && s[idx] == '|') {break;}idx++;}} else {if (s[i] == '&') res &= val;else res |= val;}i = idx;} else {idx++;}}return res;
}int main() {cin >> s;idx = 0;ans1 = ans2 = 0;bool result = calc();cout << (result ? "1" : "0") << endl;cout << ans1 << " " << ans2 << endl;return 0;
}