G题不开long long的后果,即使有思路也没用。(给我气的)
E题,不看数据范围的后果,不能一题名取题啊。
using ll = long long;
void solve() {int n, m;std::cin >> n >> m;std::vector<int>a(n);for (int i = 0; i < n; i++) {std::cin >> a[i];}std::vector<int>u(m), v(m);for (int i = 0; i < m; i++) {std::cin >> u[i] >> v[i];u[i]--, v[i]--;}int ans = n;auto dfs = [&](auto self, int i)->void {if (i == m) {int res = 1;for (int j = 0; j < n; j++) {res += (a[j] > a[0]);}ans = std::min(ans, res);return;}for (auto [x, y] : { std::make_pair(3,0),{0,3},{1,1} }) {a[u[i]] += x;a[v[i]] += y;self(self, i + 1);a[u[i]] -= x;a[v[i]] -= y;}};dfs(dfs, 0);std::cout << ans << '\n';
}
int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int t;std::cin >> t;while (t--) {solve();}return 0;
}
jiangly的代码,当中值得学习的是这个dfs,其中这个查找排名这个代码是我没想到的
无序序列中O(n)查找该数的排名。
for (int j = 0; j < n; j++) {res += (a[j] > a[0]);
}
看别人代码感觉很简单,自己写就写不出来(*/ω\*) 。
C题也是……ε=(´ο`*)))唉,o(╥﹏╥)o,鉴定为语文能力不好
Sc-Smin<=M,Sc=a1+……ak+……an+(n-k+1)*tc,Smin=a1+……ak+……an,两个一减不就是,p*tc=M吗,把tc除过去,如果p超过了n那就取n嘛,不然就取p嘛。真的服了自己这个脑子怎么就没想到这样写。稍微推导一下就出来了,虽然但是,这个读题能力怎么提升啊……
using i64 = long long;int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int n, Q, tc;std::cin >> n >> Q >> tc;std::vector<int> t(n);std::vector<i64> s(n + 1);for (int i = 0; i < n; i++) {std::cin >> t[i];}std::sort(t.begin(), t.end());for (int i = 0; i < n; i++) {s[i + 1] = s[i] + t[i];}while (Q--) {i64 M;std::cin >> M;i64 c = std::min(1LL * n, M / tc);i64 ans = s[n - c] + tc;std::cout << ans << "\n";}return 0;
}
剩下的明天再更吧。不,睡醒了在更。
-----------------------------------------------------2024/2/3/1:10----------------------------------------------------------