Codeforces Round #529 (Div. 3)错过上分记
前言
这场比赛的题真的简单,除了E题奇奇怪怪的前后缀和。
A
读原字符,挑出里面的字符输出即可。
B
排个序,分类讨论两种情况马上完事。
C
如果多的话一定有解,因为你可以一直分解,除非全是1的情况。
D
我本来以为是什么欧拉回路,其实就是无脑的建图。
一个点可以有两个点选择,要与前面不矛盾即可。
E
E题后面都不会做了。
这道题要有4个数组:
还是看代码吧:
#include<cstdio> const int maxn = 1000005; char ch[maxn]; int n; int s1[maxn],s2[maxn]; bool b1[maxn],b2[maxn]; int main() { scanf("%d",&n); scanf("%s",ch + 1); for(int i = 1; i <= n; i++) { s1[i] = s1[i - 1] + (ch[i] == ‘(‘ ? 1 : -1); if(s1[i] >= 0) b1[i] = true; else break; } for(int i = n; i >= 1; i--) { s2[i] = s2[i + 1] + (ch[i] == ‘)‘ ? 1 : -1); if(s2[i] >= 0) b2[i] = true; else break; } int ans = 0; b1[0] = b1[n + 1] = b2[0] = b2[n + 1] = true; for(int i = 1; i <= n; i++) { if(b1[i - 1] && b2[i + 1]) { if(ch[i] == ‘(‘) { if(s1[i - 1] - 1 == s2[i + 1]) ans++; } else if(ch[i] == ‘)‘) { if(s1[i - 1] + 1 == s2[i + 1]) ans++; } } } printf("%d\n",ans); return 0; }
F
F题其实比E题简单。
贪心的思想:从最小点权的点相连,每次的代价都是最小。
个人感觉还是挺优美的,把边数特别多的省得只剩下\(n\)阶。
代码:
#include<iostream> #include<algorithm> using std::cin; using std::cout; using std::endl; #define ll long long const ll maxn = 200005; struct Edge { ll from,to,weight; } s[maxn << 2]; ll tot; struct Nodes { ll val,idx; } a[maxn]; ll fa[maxn]; ll n,m; ll find(ll x) { if(fa[x] == x) return x; return fa[x] = find(fa[x]); } bool cmp(Nodes A,Nodes B) { return A.val < B.val; } bool cmp1(Edge A,Edge B) { return A.weight < B.weight; } void add(ll u,ll v,ll w) { s[++tot] = (Edge){u,v,w}; } int main() { cin >> n >> m; for(ll i = 1; i <= n; i++) { cin >> a[i].val; a[i].idx = i; } while(m--) { ll u,w; cin >> u >> v >> w; add(u,w); } std::sort(a + 1,a + n + 1,cmp); for(ll i = 2; i <= n; i++) { add(a[i].idx,a[1].idx,a[1].val + a[i].val); } std::sort(s + 1,s + tot + 1,cmp1); for(ll i = 1; i <= n; i++) fa[i] = i; ll cost = 0; for(ll i = 1; i <= tot; i++) { ll u = find(s[i].from),v = find(s[i].to); if(u == v) continue; fa[v] = u; cost += s[i].weight; } cout << cost << endl; return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。