不作分享,仅作记录。
今天保研出来了,看上去大家都拿到了满意的结果~
好久没碰算法,它居然成了备考期间的一束光。
A
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int T;
cin >> T;
while(T --)
{
string s;
cin >> s;
int c1 = 0, c2 = 0;
for(auto x : s) if(x == 'B') c2 ++; else c1 ++;
if(c1 - c2) cout << "NO" << endl; else cout << "YES" << endl;
}
return 0;
}
B
#include <bits/stdc++.h>
using namespace std;
int res[60][3];
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int T;
cin >> T;
while(T --)
{
int n;
cin >> n;
vector<int> a(n), b(n);
for(int i = 0; i < n; i ++) cin >> a[i], b[i] = a[i];
sort(b.begin(), b.end());
int cnt = 0;
for(int i = 0; i < n; i ++)
if(a[i] != b[i])
{
int j = i + 1;
while(a[j] != b[i]) j ++;
res[++cnt][0] = i + 1;
res[cnt][1] = j + 1;
res[cnt][2] = j - i;
for(int k = j; k > i; k --) swap(a[k], a[k - 1]);
}
cout << cnt << endl;
for(int i = 1; i <= cnt; i ++)
{
for(int j = 0; j < 3; j ++)
cout << res[i][j] << ' ';
cout << endl;
}
}
return 0;
}
C
#include<bits/stdc++.h>
using namespace std;
char g[30][30];
int t, n, m, k;
int st[30][30];
void check(int x, int y)
{
int res = 1;
while(g[x - res][y - res] == '*' && g[x - res][y + res] == '*') res ++;
res --;
for(int i = 0; i <= res; i ++)
st[x - i][y - i] = max(st[x - i][y - i], res),
st[x - i][y + i] = max(st[x - i][y + i], res);
}
int main()
{
cin >> t;
while(t --)
{
int mk = 100;
memset(st, 0, sizeof st);
memset(g, '.', sizeof g);
cin >> n >> m >> k;
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++)
cin >> g[i][j];
for(int i = n; i; i --)
for(int j = m; j; j --)
if(g[i][j] == '*')
check(i, j);
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++)
if(g[i][j] == '*') mk = min(mk, st[i][j]);
if(mk >= k) cout << "YES\n";
else cout << "NO\n";
}
}
D
#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
typedef pair<int, int> pi;
int talk[200010][2];
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int T;
cin >> T;
while(T --)
{
int n;
cin >> n;
vector<int> a(n);
vector<pair<int, int>> res;
for(int i = 0; i < n; i ++) cin >> a[i];
priority_queue<pi, vector<pi>, less<pi>> q;
for(int i = 0; i < n; i ++) q.push({a[i], i + 1});
while(1)
{
if(q.size() < 2) break;
pi x, y;
x = q.top(), q.pop();
y = q.top(), q.pop();
if(x.f && y.f)
x.f --, y.f --, res.push_back({x.s, y.s});
if(x.f) q.push(x);
if(y.f) q.push(y);
}
cout << res.size() << endl;
for(auto x : res) cout << x.f << ' ' << x.s << endl;
}
return 0;
}
E1
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int T;
cin >> T;
while(T --)
{
int n;
cin >> n;
vector<int> a(n);
stack<int> s1;
queue<int> q1;
for(int i = 0; i < n; i ++) cin >> a[i];
int m = a[0];
for(int i = 1; i < n; i ++)
if(a[i] < m) s1.push(a[i]), m = a[i];
else q1.push(a[i]);
while(s1.size())
{
int x = s1.top();
cout << x << ' ';
s1.pop();
}
cout << a[0] << ' ';
while(q1.size())
{
int x = q1.front();
cout << x << ' ';
q1.pop();
}
cout << endl;
}
return 0;
}
E2
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
ll res, tr[N];
ll find(int x)
{
ll ans = 0;
for(int i = x; i; i -= i & - i) ans += tr[i];
return ans;
}
void add(int x, int n)
{
res += min(find(x - 1), n - find(x));
for(int i = x; i < N; i += i & - i) tr[i] ++;
}
int main()
{
int t, n;
cin >> t;
while(t --)
{
memset(tr, 0, sizeof tr);
res = 0;
cin >> n;
vector<int> a(n), b(n);
for(int i = 0; i < n; i ++) cin >> a[i], b[i] = a[i];
sort(b.begin(), b.end());
map<int, int> p;
p[b[0]] = 1;
int j = 2;
for(int i = 1; i < n; i ++)
if(b[i - 1] < b[i])
p[b[i]] = j ++;
for(int i = 0; i < n; i ++) add(p[a[i]], i);
cout << res << endl;
}
}
F
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int liv[N];
bool st[N];
int main()
{
int n, t, k;
cin >> n;
while(n --)
{
memset(st, 0, sizeof st);
memset(liv, 0, sizeof liv);
cin >> t >> k;
vector<int> a(t);
for(int i = 0; i < t; i ++) cin >> a[i];
for(int i = 0; i < t; i ++)
if(!a[i])
{
st[i] = true;
int x = (i + t - k) % t, cnt = 0;
while(a[x])
liv[x] = ++ cnt,
st[x] = true,
x = (x + t - k) % t;
}
int res = 0;
for(int i = 0; i < t; i ++) res = max(res, liv[i]);
for(int i = 0; i < t; i ++)
if(a[i] && !st[i]) res = -1;
cout << res << endl;
}
}