日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

atcoder 076

發(fā)布時(shí)間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 atcoder 076 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

日本人的比賽

C:如果兩個(gè)數(shù)差了大于1無解,否則分類討論

#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 100010, mod = 1000000007; int n, m; ll a[N]; ll power(ll x, ll t) {ll ret = 1;for(; t; t >>= 1, x = x * x % mod) if(t & 1) ret = ret * x % mod;return ret; } int main() {scanf("%d%d", &n, &m);if(n < m) swap(n, m);if(n - m != 1 && n - m != 0){puts("0");return 0;}a[0] = 1;for(int i = 1; i <= n + 1; ++i)a[i] = a[i - 1] * (ll)i % mod;if(n == m)printf("%lld\n", 2ll * a[n] % mod * a[m] % mod);elseprintf("%lld\n", a[n] % mod * a[m] % mod);return 0; } View Code

D:分別按xy排序,然后分別把相鄰的差放進(jìn)去做最小生成樹。因?yàn)槿绻齻€(gè)點(diǎn)xaxbxc,xa<xb<xc,那么連xa->xb->xc肯定比xa->xc優(yōu),也就是說連相鄰的肯定最優(yōu)。因?yàn)檫@n-1條邊能構(gòu)成最小生成樹,而且是自己維度最優(yōu)的,所以只要和最小的y比較就行了,肯定會(huì)有解,而且是最優(yōu)的,因?yàn)槲覀儾豢赡軙?huì)去用其他的邊。

#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 100010; struct edge {int u, v;ll w;edge(int u, int v, ll w) : u (u), v (v), w (w) {} }; struct data {ll x, y;int id; } a[N]; int n; int fa[N]; ll ans; vector<edge> e; bool cp(edge x, edge y) {return x.w < y.w; } bool cp1(data x, data y) {return x.x < y.x; } bool cp2(data x, data y) {return x.y < y.y; } int find(int x) {return x == fa[x] ? x : fa[x] = find(fa[x]); } int main() {scanf("%d", &n);for(int i = 1; i <= n; ++i) fa[i] = i;for(int i = 1; i <= n; ++i){scanf("%lld%lld", &a[i].x, &a[i].y);a[i].id = i;}sort(a + 1, a + n + 1, cp1);for(int i = 2; i <= n; ++i)e.push_back(edge(a[i].id, a[i - 1].id, a[i].x - a[i - 1].x));sort(a + 1, a + n + 1, cp2);for(int i = 2; i <= n; ++i)e.push_back(edge(a[i].id, a[i - 1].id, a[i].y - a[i - 1].y));sort(e.begin(), e.end(), cp);for(int i = 0; i < e.size(); ++i){if(find(e[i].u) == find(e[i].v)) continue;ans += e[i].w;fa[find(e[i].u)] = find(e[i].v);}printf("%lld\n", ans);return 0; } View Code

E:并沒有AC,不知道哪里錯(cuò)了。

結(jié)論:不全在邊框上的整數(shù)互相之間肯定能連起來。

只要考慮的是在邊框上的點(diǎn),防止出現(xiàn)ijij的情況,于是用一個(gè)棧從順時(shí)針加入,如果加入的點(diǎn)和棧頂是同一種數(shù)字,那么彈出,否則加入,最后看棧是否為空。

wa

#include<bits/stdc++.h> using namespace std; const int N = 100010; struct data {int x, y, id; }; int n, r, c, top; vector<data> v[4]; data st[N]; bool cp1(data x, data y) {return x.x < y.x; } bool cp2(data x, data y) {return x.x > y.x; } bool cp3(data x, data y) {return x.y < y.y; } bool cp4(data x, data y) {return x.y > y.y; } int main() {scanf("%d%d%d", &r, &c, &n);for(int i = 1; i <= n; ++i){data a, b; scanf("%d%d%d%d", &a.x, &a.y, &b.x, &b.y);a.id = b.id = i;if((a.x == 0 || a.x == c || a.y == 0 || a.y == r) && (b.x == 0 || b.x == c || b.y == 0 || b.y == r)){if(a.x == 0)v[0].push_back(a);else if(a.y == r)v[1].push_back(a);else if(a.x == c)v[2].push_back(a);else if(a.y == 0)v[3].push_back(a);if(b.x == 0)v[0].push_back(b);else if(b.y == r)v[1].push_back(b); else if(b.x == c)v[2].push_back(b);else if(b.y == 0)v[3].push_back(b);}}sort(v[0].begin(), v[0].end(), cp3);sort(v[1].begin(), v[1].end(), cp1);sort(v[2].begin(), v[2].end(), cp4);sort(v[3].begin(), v[3].end(), cp2);st[0].id = 0;for(int i = 0; i < 4; ++i)for(int j = 0; j < v[i].size(); ++j){data x = v[i][j]; // printf("x.id=%d x.x=%d x.y=%d\n", x.id, x.x, x.y);if(x.id == st[top].id) --top;elsest[++top] = x;}puts(top == 0 ? "YES" : "NO");return 0; } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/19992147orz/p/7076421.html

總結(jié)

以上是生活随笔為你收集整理的atcoder 076的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。