Problem - A - Codeforces
AC代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
const int N=1e3+10;
int a[N];
int n;
void solve() {
cin>>n;
int ans=0;
for(int i=1;i<=n;i++) cin>>a[i],ans^=a[i];
if(n%2==1){
for(int i=0;i<(1<<8);i++){
if((ans^i)==0){
cout<<i<<endl;
return;
}
}
cout<<-1<<endl;
}
else{
if(ans==0) cout<<0<<endl;
else cout<<-1<<endl;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
cin>>t;
while(t--) {
solve();
}
return 0;
}
Problem - B - Codeforces
长度为n的字符串
操作有且只有一次,刚好一次
操作:选择一个字符,将它放在开头
输出字典序最小的字符串
先找到最小的字符是哪一个,然后从后往前遍历,找到第一个和最小字符相同的,将它放在开头
AC代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
int n;
string s;
void solve() {
cin>>n;
cin>>s;
char minn='z';
for(int i=0;i<(int)s.size();i++){
if(minn>s[i]) minn=s[i];
}
int idx=-1;
for(int i=(int)s.size()-1;i>=0;i--){
if(s[i]==minn){
idx=i;
break;
}
}
cout<<s[idx];
for(int i=0;i<(int)s.size();i++){
if(i==idx) continue;
cout<<s[i];
}
cout<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
cin>>t;
while(t--) {
solve();
}
return 0;
}
Problem - C - Codeforces
数形结合,从图中可以看出,找最接近切线的两条线,判断是否和抛物线有交点即可(用求根公式)
注意:当取pos-1时,pos的范围应在1到s.size()
AC代码:
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
int n, m;
int k;
void solve() {
cin >> n >> m;
vector<int>ans;
while (n--) {
cin >> k;
ans.push_back(k);
}
sort(ans.begin(), ans.end());
while (m--) {
int a, b, c;
cin >> a >> b >> c;
double k1 = b + 2 * sqrt(a * c);
double k2 = b - 2 * sqrt(a * c);
int pos = lower_bound(ans.begin(), ans.end(), k1) - ans.begin();
int pos1 = lower_bound(ans.begin(), ans.end(), k2) - ans.begin();
if (pos>=0&&pos<(int)ans.size()&&(b - ans[pos]) * (b - ans[pos])-4*a*c< 0) {
cout << "Yes" << endl;
cout << ans[pos] << endl;
} else if (pos>0&&pos<(int)ans.size()+1&& (b - ans[pos - 1]) * (b - ans[pos - 1]) - 4 * a * c < 0) {
cout << "Yes" << endl;
cout << ans[pos - 1] << endl;
}
else if (pos1>=0&&pos1<(int)ans.size()&&(b - ans[pos1]) * (b - ans[pos1])-4*a*c < 0) {
cout << "Yes" << endl;
cout << ans[pos1] << endl;
} else if (pos1>0&&pos1<(int)ans.size()+1&& (b - ans[pos1 - 1]) * (b - ans[pos1 - 1]) - 4 * a * c < 0) {
cout << "Yes" << endl;
cout << ans[pos1 - 1] << endl;
}else{
cout<<"No"<<endl;
}
}
cout << endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
cin>>t;
while (t--) {
solve();
}
return 0;
}