就那個負數設
#include <bits/stdc++.h>
using namespace std;
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
int n, k, a, b, t, mxm = -10000, m = 0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a >> b;
if (b > mxm) {
mxm = b;
t = a;
}
if (b == -1)
m -= 2;
}
cout << max(0, mxm - n + m) << ' ' << t << '\n';
return 0;
}
這題是來水的嗎?
以前要
#include <bits/stdc++.h>
using namespace std;
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
string s, tmp;
int a, b, c, t;
cin >> a >> b >> c >> s;
tmp = s;
vector <string> ans(c);
while (b--) {
for (int i = 0; i < a; i++) {
cin >> t;
tmp[t - 1] = s[i];
}
s = tmp;
for (int i = 0; i < c; i++)
ans[i].push_back(s[i]);
}
for (int i = 0; i < c; i++)
cout << ans[i] << '\n';
return 0;
}
搞得跟往年的第
#include <bits/stdc++.h>
using namespace std;
string s;
int i =0;
long long getnum();
long long f();
long long add() {
long long ret;
if (s[i] == 'f') {
i++;
ret = f();
}
else
ret = getnum();
while (i < s.length() && (s[i] == '+' ||s[i] == 'f')) {
i++;
if (s[i] == 'f') {
i++;
ret += f();
}
else
ret += getnum();
}
return ret;
}
long long calc() {
long long ret;
if (s[i] == 'f') {
i++;
ret = f();
}
else
ret = add();
while (i < s.length() && (s[i] == '*' || s[i] == 'f')) {
i++;
if (s[i] == 'f') {
i++;
ret *= f();
}
else
ret *= add();
}
return ret;
}
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
cin >> s;
cout << calc() << '\n';
return 0;
}
long long getnum() {
long long ret = 0;
for ( ; i < s.length() && isdigit(s[i]); i++)
ret = ret * 10 + s[i] - '0';
return ret;
}
long long f() {
i++;
long long mxm = INT_MIN, mnm = INT_MAX, tmp;
while (s[i] != ')') {
tmp = calc();
mxm = max(mxm, tmp);
mnm = min(mnm, tmp);
if (s[i] == ',')
i++;
}
i++;
return mxm - mnm;
}
greedy
題型,先 sort
完再搭配 STL
中的 multiset
進行二分搜
解完之後發現要能推則推
~QQ~
可能沒有
#include <bits/stdc++.h>
using namespace std;
bool cmp(pair <int, int> a, pair <int, int> b) {
if (a.second == b.second)
return a.first > b.first; // 其實這裡不用排也沒差
return a.second < b.second;
}
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
int n, k, ans = 0;
cin >> n >> k;
vector < pair<int, int> > vec(n);
for (int i = 0; i < n; i++)
cin >> vec[i].first;
for (int i = 0; i < n; i++)
cin >> vec[i].second;
sort(vec.begin(), vec.end(), cmp);
multiset < int, greater<int> > st;
for (int i = 0; i < n; i++) {
auto it = st.upper_bound(vec[i].first);
if (it != st.end()) {
st.erase(it);
st.insert(vec[i].second);
ans++;
}
else if (st.size() < k) {
ans++;
st.insert(vec[i].second);
}
}
cout << ans << '\n';
return 0;
}
編者:frankie 阮豐翗
C++ 入門
Oct 20, 2024STL containers == Standard Template Library containers
Jul 15, 2024等級 ◆ = 連聽都沒聽過。 ◆ = 知道在幹嘛,但不會寫 or 沒寫過。 ◆ = 實作過一兩次,現在寫還是會很卡。 ◆ = 已經寫過很多次,但還需要多練習題目。 知識 實用技巧 ◆ 掃描線 ◆ 位元運算
Aug 27, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up