The 4th Universal Cup. Stage 8: Grand Prix of Poland

news/2026/1/23 15:07:37/文章来源:https://www.cnblogs.com/cjjsb/p/19522462

Preface

不知道 VP 什么还是选了这赛季的外国场 UCUP,毕竟还是正规区域赛题目质量还是有保障的

就是整体难度相对偏低,签到和前期题比较多,同时算法题相对较少,不过这些问题也是老生常谈了


A. AIMPPZ

签到,枚举有几个 AI 即可

#include<cstdio>
#include<iostream>
using namespace std;
int n;
int main()
{scanf("%d",&n);int fact_5=0,tmp=n;while (tmp%5==0) ++fact_5,tmp/=5;int ans=n,times=0; tmp=1;for (int i=1;i<=fact_5;++i){tmp*=5;if (2*i>n/tmp) continue;if (n/tmp<ans) ans=n/tmp,times=i;}for (int i=1;i<=times;++i)printf("AI");for (int i=1;i<=ans-2*times;++i)printf("B");return 0;
}

B. Beats

考虑枚举一段前缀,钦定除了这段前缀外的后缀全部用第二种操作,此时只要求出需要多少次操作能给前缀排序

手玩一下会发现拿个队列维护一下可以不动的元素即可

#include<bits/stdc++.h>
using namespace std;const int N = 2e5+5;
int n, A[N];
int que[N], fr=0, ed=-1;
signed main() {ios::sync_with_stdio(0); cin.tie(0);cin >> n;int ans = n;for (int i=1; i<=n; ++i) cin >> A[i];for (int i=1; i<=n; ++i) {if (ed<fr || A[i]>que[ed]) que[++ed]=A[i];else {while (fr<=ed && A[i]>que[fr]) ++fr;}ans = min(ans, n-(ed-fr+1));}cout << ans << '\n';return 0;
}

C. Count Triangular Sequences

直接对 \(\{a_i\}\) 计数比较困难,我们考虑对其差分数组进行计数

\(d_i=a_i-(a_{i-1}+a_{i-2})\),特别地,\(d_1=a_1,d_2=a_2-a_1\)

手玩一会我们会发现对于 \(i\ge 3\),满足 \(a_i=\sum_{j=1}^n fib_j\times d_{i+1-j}\),其中 \(fib\) 是以 \(1\) 开头的斐波那契数列

因此这个题本质上就变成一个类似于背包的问题,不难发现由于 \(a_i\le 200000\),因此序列长度 \(\le 28\),用一个类似于完全背包的东西计数即可

注意要特判序列开头两个元素相同的情形

#include<cstdio>
#include<iostream>
#include<cstring>
#define RI register int
#define CI const int&
using namespace std;
const int N=200005,mod=1e9+7,inv2=(mod+1)/2;
int n,fib[30],fact[30],f[30][N];
inline void inc(int& x,CI y)
{if ((x+=y)>=mod) x-=mod;
}
inline void dec(int& x,CI y)
{if ((x-=y)<0) x+=mod;
}
int main()
{scanf("%d",&n);int pw=n,ans=0; fact[0]=1;for (RI i=1;i<=n;++i,pw=1LL*pw*n%mod) inc(ans,pw);int m; fib[0]=0; fib[1]=1;for (RI i=2;;++i){fib[i]=fib[i-1]+fib[i-2];if (fib[i]>n) { m=i; break; }}for (RI i=1;i<=m;++i) fact[i]=1LL*fact[i-1]*i%mod;// printf("m = %d\n",m);f[1][0]=1;for (RI i=1;i<=min(n,m);++i)for (RI j=0;j<=n;++j){if (f[i][j]==0) continue;inc(f[i+1][j],f[i][j]);if (j+fib[i]<=n){inc(f[i][j+fib[i]],f[i][j]);if (j+fib[i]+fib[i-1]<=n){dec(ans,1LL*fact[i]*f[i][j]%mod);} else{dec(ans,1LL*fact[i]*f[i][j]%mod*inv2%mod);}}}return printf("%d\n",ans),0;
}

E. Enigma

经典势能分析题,考虑直接暴力跑多源最短路,每次增加一个新起点时,当且仅当它能减小其它点的答案时才松弛入队

因为第一次操作后每个点的答案 \(\le 25\),而一个点入队会导致其答案至少减少 \(1\),因此总的入队次数就是 \(25\times 100000\) 级别的

#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
#define RI register int
#define CI const int&
using namespace std;
const int N=100000;
int n,dis[N+5],bkt[N+5]; vector <int> v[N+5];
int main()
{for (RI mask=0;mask<N;++mask){for (RI i=1,base=1;i<=5;++i,base*=10){int d=mask/base%10;if (d+1<=9) v[mask].push_back(mask+base);else v[mask].push_back(mask-base*9); // d == 9if (d-1>=0) v[mask].push_back(mask-base);else v[mask].push_back(mask+base*9); // d == 0}dis[mask]=N; ++bkt[dis[mask]];}// for (auto x:v[0]) printf("%d ",x); putchar('\n');for (scanf("%d",&n);n;--n){char s[10]; scanf("%s",s);int mask=0;for (RI i=0;i<5;++i)mask=mask*10+(s[i]-'0');queue <int> q; q.push(mask);auto upt=[&](int& x,CI y){--bkt[x]; x=y; ++bkt[x];};upt(dis[mask],0);while (!q.empty()){int now=q.front(); q.pop();// printf("mask = %d\n",now);for (auto to:v[now]){// printf("to = %d\n",to);if (dis[to]>dis[now]+1){upt(dis[to],dis[now]+1);q.push(to);}}}for (RI i=25;i>=0;--i)if (bkt[i]!=0){printf("%d %d\n",i,bkt[i]);break;}}return 0;
}

F. Finances

这题纯队友讨论+写出来的,我题目都没看

#include <bits/stdc++.h>using llsi = long long signed int;#define int llsiconstexpr int $n = 1'000'006;int n, m;
int a[$n];
std::vector<std::tuple<int, llsi, int>> e[$n];
std::vector<std::pair<int, llsi>> e2[$n];
int ecc[$n], ecc_cnt;
llsi ecc_a[$n];int __edge_cnt = 0;void add_edge(int u, int v, llsi c) {e[u].emplace_back(v, c, __edge_cnt++);e[v].emplace_back(u, c, __edge_cnt++);
}namespace Tarjan {int low[$n], dfn[$n];std::stack<int> st;std::vector<std::tuple<int, int, llsi>> bdg;int cnt;void tarjan(int x, std::tuple<int, llsi, int> be) {auto [fa, c, las_id] = be;low[x] = dfn[x] = ++cnt;st.push(x);for(auto [out, cc, id]: e[x]) {if(id == las_id) continue;if(!dfn[out]) {tarjan(out, {x, cc, id ^ 1});low[x] = std::min(low[x], low[out]);} else {low[x] = std::min(low[x], dfn[out]);}}if(dfn[x] == low[x]) {ecc[x] = ++ecc_cnt;ecc_a[ecc_cnt] += a[x];while(st.top() != x) {ecc[st.top()] = ecc_cnt;ecc_a[ecc_cnt] += a[st.top()];st.pop();}st.pop();if(fa != -1) bdg.emplace_back(x, fa, c);}}
}void init() {__edge_cnt = 0;Tarjan::cnt = 0;Tarjan::bdg.clear();ecc_cnt = 0;for(int i = 0; i <= n; ++i) {e[i].clear();e2[i].clear();Tarjan::low[i] = 0;Tarjan::dfn[i] = 0;ecc_a[i] = 0;}
}std::pair<bool, llsi> dfs(int cur, int fa, llsi c) {// std::cerr << std::format("dfs({} {} {})", cur, fa, c) << char(10);llsi sum = ecc_a[cur];for(auto [out, cc]: e2[cur]) if(out != fa) {auto [res_out, sum_out] = dfs(out, cur, cc);if(!res_out) return { false, 0 };sum += sum_out;}return { std::abs(sum) <= c, sum };
}bool work() {std::cin >> n >> m;init();for(int i = 1; i <= n; ++i) std::cin >> a[i];for(int i = 1, u, v; i <= m; ++i) {llsi c;std::cin >> u >> v >> c;add_edge(u, v, c);}Tarjan::tarjan(1, {-1, -1, -1});// for(int i = 1; i <= n; ++i) std::cerr << ecc[i] << char(i == n ? 10 : 32);for(auto [u, v, c]: Tarjan::bdg) {e2[ecc[u]].emplace_back(ecc[v], c);e2[ecc[v]].emplace_back(ecc[u], c);}return dfs(1, 0, 0).first;
}int32_t main() {std::ios::sync_with_stdio(false);int T; std::cin >> T; while(T--) std::cout << (work() ? "TAK\n" : "NIE\n");return 0;
}

H. Hacking

签到,我题都没看

#include <bits/stdc++.h>int main() {int n; std::cin >> n;int sum = 0;while(n--) { int a; std::cin >> a; sum += a; }std::cout << 600 - sum << char(10);return 0;
}

I. ICPC Isolation

爆搜+打表,真是公公又式式

#include <bits/stdc++.h>const char* UNAME[27] = { "UW", "UJ", "UWR", "MAP", "PW", "AGH", "PG", "NLU", "PUT", "PO", "PWR", "SGGW", "UMCS", "UR", "ZUT", "DTP", "GOO", "HUA", "KUL", "PL", "PM", "PS", "UAM", "UG", "UMK", "UO", "WAT" };
int        UCOUNT[27] = {  11 ,   9 ,    8 ,    7 ,   6 ,    5 ,   4 ,    3 ,    3 ,   2 ,    2 ,     2 ,     2 ,   2 ,    2 ,    1 ,    1 ,    1 ,    1 ,   1 ,   1 ,   1 ,    1 ,   1 ,    1 ,   1 ,    1  };extern int ans[27][8][10];void print_table(const std::string &prefix, int ans[8][10]) {std::cout << "    // " << prefix << char(10);for(int i = 0; i < 8; ++i) {std::cout << "    ";for(int j = 0; j < 10; ++j)std::cout << std::setw(2) << ans[i][j] << ",",std::cout << char(j == 9 ? 10 : 32);}
}void print_ans() {std::cout << "int ans[27][8][10] = {\n";for(int k = 0; k < 27; ++k)print_table(std::format("ars = {} ({})", k, UNAME[k]), ans[k]);std::cout << "};\n";return ;
}bool dfs(int ans[8][10], int i, int j) {if(i == 8) return true;// std::cerr << "[dfs] i, j = " << i << ", " << j << char(10);int ni = i, nj = j + 1;if(nj == 10) nj = 0, ni += 1;for(int cl = 0; cl < 27; ++cl) if(UCOUNT[cl]) {bool res = false;;for(auto [si, sj]: (int[4][2]){{i - 1, j - 1}, {i - 1, j}, {i - 1, j + 1}, {i, j - 1}}) {if(si < 0 || si >= 8) continue;if(sj < 0 || sj >= 10) continue;if(cl == ans[si][sj]) goto __continue__;}UCOUNT[cl]--; ans[i][j] = cl;res = dfs(ans, ni, nj);UCOUNT[cl]++;if(res) return true;
__continue__: continue;}return false;
}void prep_ans() {for(int ars = 0; ars < 27; ++ars) {std::cerr << "Calculate ans for (ars = " << ars << ")" << std::endl;ans[ars][0][0] = ars;UCOUNT[ars]--;dfs(ans[ars], 0, 1);UCOUNT[ars]++;}
}int main() {std::ios::sync_with_stdio(false);// memset(ans, -1, sizeof(ans));// prep_ans();// print_ans();// return 0;std::string ars; std::cin >> ars;int k;for(k = 0; k < 27; ++k) if(ars == UNAME[k]) break;assert(k < 27);for(int i = 0; i < 8; ++i) for(int j = 0; j < 10; ++j)std::cout << UNAME[ans[k][i][j]] << char(j == 9 ? 10 : 32);return 0;
}int ans[27][8][10] = {// ars = 0 (UW)0,  1,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  2,  3,  2,  3,0,  1,  0,  1,  0,  1,  0,  1,  0,  4,2,  3,  2,  3,  2,  4,  5,  4,  5,  6,0,  4,  5,  4,  5,  6,  7,  6,  7,  4,5,  6,  7,  8,  9,  8,  9,  8, 10, 11,10, 11, 12, 13, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 1 (UJ)1,  0,  1,  0,  1,  0,  1,  0,  1,  0,2,  3,  2,  3,  2,  3,  2,  3,  2,  3,0,  1,  0,  1,  0,  1,  0,  1,  0,  4,2,  3,  2,  3,  2,  4,  5,  4,  5,  6,0,  4,  5,  4,  5,  6,  7,  6,  7,  4,5,  6,  7,  8,  9,  8,  9,  8, 10, 11,10, 11, 12, 13, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 2 (UWR)2,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  3,  2,  3,  2,  3,  2,  3,  2,  3,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  4,  5,  4,  5,  4,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  8,  9,  8, 10, 11,10, 11, 12, 13, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 3 (MAP)3,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  4,  5,  4,  5,  4,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  8,  9,  8, 10, 11,10, 11, 12, 13, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 4 (PW)4,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  8,  9,  8, 10, 11,10, 11, 12, 13, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 5 (AGH)5,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,6,  7,  8,  9,  8,  4,  8,  9, 10, 11,10, 11, 12, 13, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 6 (PG)6,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  7,  8,  9,  8,  4,  8,  9, 10, 11,10, 11, 12, 13, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 7 (NLU)7,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  8,  9,  8,  4,  8,  9, 10, 11,10, 11, 12, 13, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 8 (PUT)8,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9, 10, 11,10, 11, 12, 13, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 9 (PO)9,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8, 10,  8, 10,11, 12, 11, 12, 13, 14, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 10 (PWR)10,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,11, 12, 11, 12, 13, 14, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 11 (SGGW)11,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 13, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 12 (UMCS)12,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 13, 14, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 13 (UR)13,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 15, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 14 (ZUT)14,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 15, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 15 (DTP)15,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 16 (GOO)16,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,17, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 17 (HUA)17,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,16, 18, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 18 (KUL)18,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,16, 17, 19, 20, 21, 22, 23, 24, 25, 26,// ars = 19 (PL)19,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,16, 17, 18, 20, 21, 22, 23, 24, 25, 26,// ars = 20 (PM)20,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,16, 17, 18, 19, 21, 22, 23, 24, 25, 26,// ars = 21 (PS)21,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,16, 17, 18, 19, 20, 22, 23, 24, 25, 26,// ars = 22 (UAM)22,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,16, 17, 18, 19, 20, 21, 23, 24, 25, 26,// ars = 23 (UG)23,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,16, 17, 18, 19, 20, 21, 22, 24, 25, 26,// ars = 24 (UMK)24,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,16, 17, 18, 19, 20, 21, 22, 23, 25, 26,// ars = 25 (UO)25,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,16, 17, 18, 19, 20, 21, 22, 23, 24, 26,// ars = 26 (WAT)26,  0,  1,  0,  1,  0,  1,  0,  1,  0,1,  2,  3,  2,  3,  2,  3,  2,  3,  2,0,  4,  0,  1,  0,  1,  0,  1,  0,  1,2,  3,  2,  3,  2,  3,  4,  5,  4,  5,0,  4,  5,  4,  5,  6,  7,  6,  7,  6,5,  6,  7,  8,  9,  4,  8,  9,  8, 10,10, 11, 12, 11, 12, 13, 14, 13, 14, 15,16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
};

J. Jury of AMPPZ

考虑二分答案 \(x\),则贪心地让计算几何题里 \((val,id)\) 二元组最大的那 \(x\) 个进入前 \(k\) 名一定最优

要最大化它们的最小值,只需要从小到大排序后依次加上 \(n,n-1,\ldots,n-x+1\) 即可

对于非计算几何题,前 \(k-x\) 大的元素其实可以忽略不管,我们只要保证上面的最小值能超过剩下题的最大值即可

还是如法炮制地贪心,从大到小排序后依次加上 \(1,2,\ldots\) 即可,最后求个最大值和前面比较一下

#include <bits/stdc++.h>using llsi = long long signed int;#define int llsiconstexpr int $n = 1'000'006;int n, m;
int a[$n];
std::vector<std::tuple<int, llsi, int>> e[$n];
std::vector<std::pair<int, llsi>> e2[$n];
int ecc[$n], ecc_cnt;
llsi ecc_a[$n];int __edge_cnt = 0;void add_edge(int u, int v, llsi c) {e[u].emplace_back(v, c, __edge_cnt++);e[v].emplace_back(u, c, __edge_cnt++);
}namespace Tarjan {int low[$n], dfn[$n];std::stack<int> st;std::vector<std::tuple<int, int, llsi>> bdg;int cnt;void tarjan(int x, std::tuple<int, llsi, int> be) {auto [fa, c, las_id] = be;low[x] = dfn[x] = ++cnt;st.push(x);for(auto [out, cc, id]: e[x]) {if(id == las_id) continue;if(!dfn[out]) {tarjan(out, {x, cc, id ^ 1});low[x] = std::min(low[x], low[out]);} else {low[x] = std::min(low[x], dfn[out]);}}if(dfn[x] == low[x]) {ecc[x] = ++ecc_cnt;ecc_a[ecc_cnt] += a[x];while(st.top() != x) {ecc[st.top()] = ecc_cnt;ecc_a[ecc_cnt] += a[st.top()];st.pop();}st.pop();if(fa != -1) bdg.emplace_back(x, fa, c);}}
}void init() {__edge_cnt = 0;Tarjan::cnt = 0;Tarjan::bdg.clear();ecc_cnt = 0;for(int i = 0; i <= n; ++i) {e[i].clear();e2[i].clear();Tarjan::low[i] = 0;Tarjan::dfn[i] = 0;ecc_a[i] = 0;}
}std::pair<bool, llsi> dfs(int cur, int fa, llsi c) {// std::cerr << std::format("dfs({} {} {})", cur, fa, c) << char(10);llsi sum = ecc_a[cur];for(auto [out, cc]: e2[cur]) if(out != fa) {auto [res_out, sum_out] = dfs(out, cur, cc);if(!res_out) return { false, 0 };sum += sum_out;}return { std::abs(sum) <= c, sum };
}bool work() {std::cin >> n >> m;init();for(int i = 1; i <= n; ++i) std::cin >> a[i];for(int i = 1, u, v; i <= m; ++i) {llsi c;std::cin >> u >> v >> c;add_edge(u, v, c);}Tarjan::tarjan(1, {-1, -1, -1});// for(int i = 1; i <= n; ++i) std::cerr << ecc[i] << char(i == n ? 10 : 32);for(auto [u, v, c]: Tarjan::bdg) {e2[ecc[u]].emplace_back(ecc[v], c);e2[ecc[v]].emplace_back(ecc[u], c);}return dfs(1, 0, 0).first;
}int32_t main() {std::ios::sync_with_stdio(false);int T; std::cin >> T; while(T--) std::cout << (work() ? "TAK\n" : "NIE\n");return 0;
}

K. Kids' Blocks

又是个我没看题的签到

#include <bits/stdc++.h>constexpr int $n = 300'005;
int a[$n], pm[$n], sm[$n];int main() {std::ios::sync_with_stdio(false);int n; std::cin >> n;for(int i = 1; i <= n; ++i) std::cin >> a[i];pm[1] = a[1]; for(int i =     2; i <= n; ++i) pm[i] = std::max(pm[i - 1], a[i]);sm[n] = a[n]; for(int i = n - 1; i >= 1; --i) sm[i] = std::max(sm[i + 1], a[i]);int ans = 0x7fff'ffff;for(int i = 1; i < n; ++i) ans = std::min(ans, std::abs(sm[i + 1] - pm[i]));std::cout << ans << char(10);return 0;
}

L. Linear Averaging

我去蹲了个坑队友就会这个题了,好像是个转化成几何问题后用 convex trick 搞一搞的题,只能说队友太有实力

#include <bits/stdc++.h>using llsi = long long signed int;
using ldb = long double;#define double ldbconstexpr int $n = 500005;int n, m, k;
int a[$n];
llsi sum_k[$n];
llsi pos[$n], neg[$n], ans[$n];double ans1[$n], ans2[$n];
void solve(double ans[$n]) {std::vector<std::pair<double, double>> lines;for(llsi i = 1; i <= m; ++i) {if(pos[i] >= 0) {double K = double(pos[i]);double B = double(i);if(K == 0) {ans[i] = 0.0L;continue;}while(lines.size() && K >= lines.back().first) lines.pop_back();while(lines.size() >= 2) {auto [K1, B1] = lines[lines.size() - 1];auto [K2, B2] = lines[lines.size() - 2];auto Y1 = (K1 * B2 - K2 * B1) / (K1 - K2);auto Y2 = (K1 * B  - K  * B1) / (K1 - K );if(Y2 <= Y1) break;lines.pop_back(); }lines.emplace_back(K, B);}while(lines.size() >= 2) {auto [K1, B1] = lines[lines.size() - 1];auto [K2, B2] = lines[lines.size() - 2];if((K1 * B2 - K2 * B1) / (K1 - K2) >= i) break;lines.pop_back();}// std::cerr << "[DEBUG solve() i = " << i << "] lines:";// if(lines.empty()) std::cerr << " [empty]";// else for(auto [K, B]: lines) std::cerr << " (" << K << ", " << B << ")";// std::cerr << char(10);if(lines.size()) {auto [K, B] = lines.back();ans[i] = ((double)i - B) / (K / k);} else {ans[i] = 1e16;}// std::cerr << "ans[" << i << "] = " << ans[i] << char(10);}
}const char* clip(llsi a, llsi INF) {if(a >= INF) return "INF";if(a <= -INF) return "NNF";static char ss[40];std::sprintf(ss, "%lld", a);return ss;
}int main() {std::ios::sync_with_stdio(false);std::cerr << std::fixed << std::setprecision(2);std::cin >> n >> m >> k;for(int i = 1; i <= n; ++i) std::cin >> a[i];/* prep sum_k */ {llsi s = 0;for(int i = 1; i < k; ++i) s += a[i];for(int i = k; i <= n; ++i) {s += a[i];sum_k[i - k + 1] = s;s -= a[i - k + 1];}}std::deque<int> q_pos, q_neg;for(int i = 1; i <= m; ++i)pos[i] = -4e18,neg[i] = 4e18;for(int i = 1; i <= n; ++i)pos[a[i]] = llsi(k) * llsi(a[i]),neg[a[i]] = llsi(k) * llsi(a[i]);for(int i = 1; i <= n; ++i) {if(i + k - 1 <= n) {while(q_pos.size() && sum_k[i] >= sum_k[q_pos.back()]) q_pos.pop_back();while(q_neg.size() && sum_k[i] <= sum_k[q_neg.back()]) q_neg.pop_back();q_pos.push_back(i);q_neg.push_back(i);}while(q_pos.size() && q_pos.front() + k - 1 < i) q_pos.pop_front();while(q_neg.size() && q_neg.front() + k - 1 < i) q_neg.pop_front();pos[a[i]] = std::max(pos[a[i]], sum_k[q_pos.front()]);neg[a[i]] = std::min(neg[a[i]], sum_k[q_neg.front()]);}for(llsi i = 1; i <= m; ++i)pos[i] -= i * k,neg[i] -= i * k; solve(ans1);for(int i = 1; i <= m; ++i) pos[i] = -neg[m - i + 1];solve(ans2);// std::cerr << "[DEBUG] pos[]: "; for(int i = 1; i <= m; ++i) std::cerr << clip(pos[i], 100000) << char(i == m ? 10 : 32);// std::cerr << "[DEBUG] neg[]: "; for(int i = 1; i <= m; ++i) std::cerr << clip(neg[i], 100000) << char(i == m ? 10 : 32);// std::cerr << "[DEBUG] ans1[]: "; for(int i = 1; i <= m; ++i) std::cerr << ans1[i] << char(i == m ? 10 : 32);// std::cerr << "[DEBUG] ans2[]: "; for(int i = 1; i <= m; ++i) std::cerr << ans2[i] << char(i == m ? 10 : 32);std::cout << std::fixed << std::setprecision(20);for(int i = 1; i <= m; ++i) {double ans = std::min(ans1[i], ans2[m - i + 1]);if(ans < 0.0L || ans > 1.0L) std::cout << "-1\n";else std::cout << ans << char(10);}return 0;
}

Postscript

感觉两天一训强度还是挺大的,不禁让我想起之前每天一训是怎么坚持下来的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1205380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拒绝踩坑!全国雅思培训机构全面深度测评,高性价比提分方案汇总

雅思考试作为全球认可度最高的语言能力测试之一,是学生留学、职场晋升的必经之路,但雅思培训选课难、提分慢、机构鱼龙混杂等问题,一直困扰着广大考生。无论是北京海淀区、上海徐汇区,还是广州天河区、成都锦江区、…

挖掘机毕业设计

第1章 设计计算的内容和步骤 液压系统有液压传动系统和液压控制系统之分。前者以传递动力为主&#xff0c;追求传动特性的完善&#xff1b;后者以实施控制为主&#xff0c;追求控制特性的完善。但从结构和组成原理看&#xff0c;二者无本质的差别。本次设计&#xff0c;是液压传…

网络安全渗透测试:从入门到实践,什么是网络安全渗透测试?渗透测试的实际应用一文解析

网络安全渗透测试&#xff1a;从入门到实践 网络安全渗透测试&#xff08;Penetration Testing&#xff0c;简称Pen Test&#xff09;是现代网络安全领域中不可或缺的一部分。它通过模拟黑客攻击的方式&#xff0c;帮助企业和组织发现系统中的安全漏洞&#xff0c;从而提升整体…

全国雅思培训哪里好?权威深度测评TOP5榜单,精准选课不踩坑

雅思培训市场竞争激烈,全国雅思考生普遍面临备考与选课难题。无论是北京朝阳、上海浦东、广州天河等核心城区,优质雅思教育机构扎堆却良莠不齐,考生难以筛选靠谱选项;还是成都都江堰、武汉洪山、深圳南山等远郊区县…

lectrue7 哈希表

数据结构&#xff1a;DBMS在系统内部的许多不同部分使用各种数据结构&#xff0c;一些例子包括&#xff1a;内部元数据 (Internal Meta-Data)&#xff1a;用于跟踪关于数据库和系统状态信息的数据。例如&#xff1a;页表 (Page tables)、页目录 (Page directories)。核心数据存…

合肥腹直肌修复服务哪家合适,合肥妈妈值得推荐

在产后恢复的关键阶段,腹直肌康复修复是许多宝妈重塑体态、重拾自信的核心需求。面对市场上琳琅满目的腹直肌修复服务,腹直肌修复服务哪家便宜腹直肌修复服务哪家合适成为宝妈们热议的话题。以下结合服务类型与真实口…

同步电机模型的MATLAB仿真

第2章同步电机基本原理 2.1理想同步电机 2.1.1理想同步电机假设 众所周知&#xff0c;由于转子结构的不同&#xff0c;同步电机可分为隐极机和凸极机两类。以下的研究对象像都是凸极机。 同步电机的主要特点是&#xff1a;定子有三相交流绕组&#xff0c;转子为直流励磁。 将电…

2026出国雅思培训机构权威测评榜单:TOP5深度解析,精准选课不踩坑

英国文化教育协会数据显示,中国雅思考生平均备考周期9.2个月,43%需二次及以上考试,其中北京朝阳区、上海静安区、广州天河区、深圳南山区、杭州西湖区、成都锦江区等全国多地区区县考生,普遍面临雅思培训选课难、找…

基于DSP28335 SCI模块控制ESP8266 WiFi模块的实现方案

一、硬件连接与配置硬件接口定义DSP28335引脚 ESP8266引脚 功能说明SCITXDA RX DSP发送数据到ESP8266SCIRXDA TX ESP8266发送数据到DSPGND GND 共地VCC 3.3V 供电(需电平转换芯片)关键配置参数系统时钟:假设SYSCLKO…

盘点盐城有实力的中考复读品牌学校,鸿文复读口碑良好

2026年江苏中考竞争持续白热化,部分考生因发挥失常、基础薄弱与理想高中失之交臂,中考复读成为重启升学梦想的关键选择。然而,当前市场中中考复读机构鱼龙混杂:部分机构缺乏正规资质,教学体系松散;另有机构师资不…

探讨丰安铝业专业不专业,从多方面剖析企业实力

在建筑铝材供应链的升级浪潮中,一家能提供一站式定制+稳定交付的铝材供应商,是门窗幕墙企业、工业制造商乃至智能家居品牌的核心竞争力之一。面对市场上良莠不齐的铝材厂商,如何判断其口碑、专业度与质量稳定性?以…

【软件测试】移动应用测试用例以及如何用于测试

移动应用程序已成为我们日常生活不可或缺的一部分&#xff0c;全球数百万用户利用它们进行各种活动。本文将讨论不同类型的测试用例以及如何在移动应用测试中使用它们。 什么是测试用例&#xff1f; 测试用例是一套逐步进行的指令&#xff0c;用于验证软件系统的某个功能或特…

技术分享 | 用Dify搭建个人AI知识助手

将分散的技术资料、产品手册、行业干货汇集成可随时调用的“知识中枢”​ 对技术人员而言,知识资产常陷入“碎片化散落 + 低效复用”的恶性循环:技术分享邮件躺卧邮箱、产品文档散落Notion 等平台,面对产品使用、技…

2026全国出国雅思培训机构深度测评排行榜

雅思考试作为出国深造的核心门槛,近年来报考人数持续攀升,但雅思培训选课难题却困扰着全国千万考生——北京朝阳区、上海徐汇区、广州天河区、深圳南山区、成都锦江区等不同区县的考生,均面临相同困境:优质教育机构…

测试数据验证的3大难题,这个工具全搞定!

在测试过程中&#xff0c;涉及数据验证时&#xff0c;我们常常面临三大难题&#xff1a;数据不准确、处理速度慢、结果难以复现。 今天&#xff0c;我要强推一个神器&#xff0c;它让我的数据测试工作变得轻松又高效&#xff01; 一 相关背景 模块化开发和分布式服务器部署盛…

2026年有名的智慧用电生产厂家,飞凌佳杰实力不容小觑!

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为校园及各类人员密集场景的用电安全升级提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:北京飞凌佳杰电子科技有限公司 推荐指数:★★★…

【Linux基础开发工具 (二)】详解Linux文本编辑器:Vim从入门到精通——完整教程与实战指南(上) - 详解

【Linux基础开发工具 (二)】详解Linux文本编辑器:Vim从入门到精通——完整教程与实战指南(上) - 详解2026-01-23 14:53 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: nor…

从单机到并发:深度解析单线程 Socket 服务器的局限性与挑战

在网络编程的入门阶段,我们通常会实现一个简单的 TCP 回显服务器。虽然基本的 socket-bind-listen 流程能够打通通信链路,但在实际应用中,单线程服务器往往会遇到“一夫当关,万夫莫开”的尴尬境地。 本文将结合实验代码,剖析单线程服务器的阻塞点,并探讨并发处理的必要性…

靠谱的高压开关柜服务商厂家,得润电气排名第几?

问题1:如何判断一家高压开关柜厂家是否专业?专业厂家和普通厂家的核心区别是什么? 判断高压开关柜厂家是否专业,需从资质认证、技术沉淀、生产标准与服务体系四大维度综合考量。首先看资质,是否具备国家高新技术企…

2026年汽车后视镜热弯模具选购指南:实力厂家参考,硅酸钙保温板/铝行业精炼用热鼎盘,汽车后视镜热弯模具直销厂家有哪些

行业现状与模具核心价值 随着汽车行业对轻量化、安全性的需求升级,汽车后视镜热弯模具作为精密成型的关键工具,其技术精度与稳定性直接影响后视镜的曲面曲率、光学性能及抗冲击能力。当前,国内模具市场呈现“技术迭…