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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ACdream区域赛指导赛之手速赛系列(2)

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ACdream区域赛指导赛之手速赛系列(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版權聲明:本文為博主原創文章。未經博主同意不得轉載。 https://blog.csdn.net/DaiHaoC83E15/article/details/26187183

? ? ? ?回到作案現場:http://acdream.info/onecontest/1014

? ? ? ?前言:自己出份山寨版的解題報告。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

A - Boy or Girl

? ? ? ? 統計用了多少種單詞,分奇偶數輸出結論,能夠用STL的set實現,我對map比較熟。所以果斷用map水了。

/* * this code is made by code4101 * Problem: 1080 * Verdict: Accepted * Submission Date: 2014-05-19 01:47:38 * Time: 0 MS * Memory: 1676 KB */ #include <iostream> #include <map> using namespace std;int main() {string s;map<char, int> a;while (cin >> s){a.clear();for (int i = 0; i < s.size(); i++) a[s[i]]++;if (a.size()&1) cout << "IGNORE HIM!\n";else cout << "CHAT WITH HER!\n";}return 0; }

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

B - Walking in the Rain

? ? ? ?題目非常多無用的干擾信息。

題意非常easy,就是給n個磚塊順序排好,告訴你每塊磚幾天后壞。

然后問幾天后"路徑不通",不通的定義是:①第一個或最后一個壞了 ②存在連續的兩個壞了。

? ? ? ?我是用遞歸,每次找到最小的非0值模擬暴力解(比賽中的我常常該去吃藥了)。

后來__M子__給的思想是一次遍歷就夠了:遍歷max(a[i]。a[i+1]),記錄最小值,再與頭尾比較。

/* * this code is made by code4101 * Problem: 1079 * Verdict: Accepted * Submission Date: 2014-05-19 02:01:47 * Time: 0 MS * Memory: 1672 KB */ #include <iostream> using namespace std;int main() {int n, a[1010], i, ans, t;while (cin >> n){for (i = 0; i < n; i++) cin >> a[i];ans = min(a[0], a[n-1]);for (i = 0; i < n-1; i++){t = max(a[i], a[i+1]);if (t < ans) ans = t;}cout << ans << "\n";}return 0; }

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

C - Cutting Figure

? ? ? ?就是給一個連通圖,讓你用最小的刪除操作把它變成非連通圖。事實上答案范圍一定在-1~4之間(隨便找一個點,把上下左右全刪除。這個點就孤立了。最壞情況下把其變為非連通圖),-1代表無法實現。再進一步分析,事實上答案僅僅有-1、1、2三種情況(角上的點最多去掉2個相鄰的就孤立了)。

? ? ? ?-1就是初始集合元素不超過2個。這樣無論怎么刪都是連通的。1的話要遍歷,一個個頂點去掉,用BFS嘗試看是不是非連通圖(BFS用隊列實現。這個不懂去補基礎吧)。假設不是前兩者,那么答案就一定是2了。

/* * this code is made by code4101 * Problem: 1078 * Verdict: Accepted * Submission Date: 2014-05-18 12:04:24 * Time: 0 MS * Memory: 1688 KB */ #include <cstdio> #include <iostream> #include <cstring> #include <queue> using namespace std;int n, m; bool a[60][60], b[60][60], zero[60][60] = {};struct point{int x, y; };// 推斷一個b是不是連通 bool isconnected(int x, int y) {// 先進行一遍BFSqueue<point> A;point p, t;p.x = x; p.y = y;A.push(p); b[p.x][p.y] = 0;while (A.size()){t = A.front(); A.pop(); if (b[p.x = t.x-1][p.y = t.y]) A.push(p), b[p.x][p.y] = 0;if (b[p.x = t.x][p.y = t.y-1]) A.push(p), b[p.x][p.y] = 0;if (b[p.x = t.x][p.y = t.y+1]) A.push(p), b[p.x][p.y] = 0;if (b[p.x = t.x+1][p.y = t.y]) A.push(p), b[p.x][p.y] = 0;}if (memcmp(zero, b, sizeof(b))) return 0;else return 1; }// 推斷去掉隨意一個#是不是連通 int fun() {int i, j;for (i = 1; i <= n; i++){for (j = 1; j <= m; j++) if (a[i][j]){memcpy(b, a, sizeof(a));b[i][j] = 0;int x, y; // 起點if (b[x = i-1][y = j]);else if (b[x = i][y = j-1]);else if (b[x = i][y = j+1]);else if (b[x = i+1][y = j]);if (!isconnected(x, y)) return 1;}}return 2; }int main() {while (cin >> n >> m){memset(a, 0, sizeof(a));int sum = 0, i, j;for (i = 1; i <= n; i++){getchar();for (j = 1; j <= m; j++){if (getchar() == '#'){sum += a[i][j] = 1;}}}if (sum <= 2) cout << "-1\n";else cout << fun() << "\n";}return 0; }- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

D - LCM Challenge

? ? ? ?這題我在藍橋杯做過:http://www.coolnote.cn/problems/66/。這篇文章分析的非常具體:http://blog.csdn.net/u011669700/article/details/18702757,事實上我到如今還是不太懂原理;原題來自這里:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1632。

/* * this code is made by code4101 * Problem: 1077 * Verdict: Accepted * Submission Date: 2014-05-19 02:15:50 * Time: 0 MS * Memory: 1672 KB */ #include <iostream> using namespace std;int main() {unsigned long long n, ans;while (cin >> n){if (n <= 2) ans = n;else if (n & 1) ans = n * (n - 1) * (n - 2);else if (n % 3) ans = n * (n - 1) * (n - 3);else ans = (n - 1) * (n - 2) * (n - 3);cout << ans << '\n';}return 0; }

轉載于:https://www.cnblogs.com/xfgnongmin/p/10658225.html

總結

以上是生活随笔為你收集整理的ACdream区域赛指导赛之手速赛系列(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。