蓝桥杯省赛结束了,估了下分,,等待最后的结果吧。
T1
第一眼看以为是博弈论,额,反正看题的时候不在状态。。十分钟的时候看清了题才写出来
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n1, n2, k1, k2;
cin >> n1 >> n2 >> k1 >> k2;
if(n1 <= n2) cout << "Second";
else cout << "First";
return 0;
}
T2
top K 类型
排序、堆等等都可以
//贪心
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
typedef pair<int, int> PII;
const int N = 2e5 + 7;
int a[N], b[N];
int n, k;
int main()
{
ios::sync_with_stdio(false);
int res = 0;
cin >> n >> k;
for(int i = 0; i < n; ++ i) cin >> a[i];
for(int i = 0; i < n; ++ i) cin >> b[i];
for(int i = 0; i < n; ++ i) res += a[i];
//小根堆
priority_queue<PII, vector<PII>, greater<PII>> q;
for(int i = 0; i < n; ++ i) q.push({b[i] - a[i], i});
k = n - k;
while(k --)
{
auto t = q.top(); q.pop();
int x = t.first;
if(x >= 0) break;
res += x;
}
cout << res;
return 0;
}
T3
逆向思维。和有一次的力扣T4很像啊
思路就是将所有情况用哈希表计数
#include <bits/stdc++.h>
using namespace std;
unordered_map<string, string> ans; //只存下答案
unordered_map<string, int> cnt; // 计数
unordered_set<string> uset;
int main()
{
int n; cin >> n;
for(int i = 0; i < n; ++ i)
{
string s; cin >> s;
uset = {};
int m = s.size();
for(int L = 1; L <= m; ++ L)
{
for(int j = 0; j < m; ++ j)
{
int k = j + L - 1;
if(k >= m) break;
string t = s.substr(j, L);
uset.insert(t);
ans[t] = s;
}
}
for(auto &j : uset) cnt[j] ++;
}
cin >> n;
while(n --)
{
string s; cin >> s;
cout << cnt[s] << ' ';
if(!cnt[s]) cout << '-' << endl;
else cout << ans[s] << endl;
}
return 0;
}