这场战况:5min过了个A,然后B写了40min没过,开始烦躁了,然后没什么进展,差不多1h15min就睡觉了,然后掉了21min,这个分段还能掉分...
目前只补到B题,C题已经吃力了,题解也没怎么看明白,明天再琢磨一下
其实前面两题没什么好讲得,就直接放代码了
这两题感受就是,一眼看穿本质就很简单了
A:
点击查看代码
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n; cin >> n;
vector<int> a(n+1);
set<int> st;
for(int i = 1; i <= n; i++){
cin >> a[i];
st.insert(a[i]);
}
cout << st.size() << '\n';
}
int main(){
int t;
cin >> t;
while(t--){
solve();
}
return 0;
}
B:
点击查看代码
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n; cin >> n;
string s; cin >> s;
int len = 0;
for(int i = 0; i < n - 1; i++){
if(s[i] != s[i+1])len++;
}
//101010101010
//011010101010
//01010101010
//100110101010
//1010101010 9 + 1
//
//cout <<"len:" << len << '\n';
int ans = n;
if(len>=3){
ans += len;
if(s[0] == '1')ans++;
cout << ans - 2 << '\n';
}else if(len == 0){
if(s[0] == '1')ans += 1;
//cout << len << ' ' << ans << '\n';
cout << ans << '\n';
}else if(len == 1){
//if(s[0] == '1') ans += 1;
ans += len;
cout << ans << '\n';
}else if(len == 2){ // 101 011
len -= 1;
ans += len;
cout << ans << '\n';
}
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);
int t;
cin >> t;
while(t--){
solve();
}
return 0;
}
C:
先贴个代码:
点击查看代码
#include <bits/stdc++.h>
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define pb push_back
#define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
using namespace std;
typedef long long ll;
typedef pair <ll, ll> pii;
void task() {
int n, k; cin >> n >> k;
vector <int> a(n), b(n+1, 0), c(2*n+1, 0);
for (int i = 0; i < n; i++) cin >> a[i], b[i+1] = b[i] + 2*(a[i] <= k)-1;
int fo = 0;
c[b[1]+n]++;
for (int i = 2; i < n; i++) {
if (b[n]-b[i] < 0) {
if (b[i] > 0 || (b[i] == 0 && c[n])) fo = 1;
}
else {
if (b[i] >= 0 || c[b[i]+n] || c[n]) fo = 1;
}
c[b[i]+n]++;
}
if (fo) cout << "YES\n";
else cout << "NO\n";
}
int main () {
FIO;
int tt; cin >> tt;
while (tt--) task();
return 0;
}
复习去了,run~

浙公网安备 33010602011771号