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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ccf-csp #201912-2 回收站选址

發(fā)布時(shí)間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ccf-csp #201912-2 回收站选址 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目思路

這道題是一道非常典型的CCF-CSP認(rèn)證前兩題的題目,主要考察對(duì)二維坐標(biāo)的標(biāo)記和對(duì)標(biāo)記的查詢。

把輸入的點(diǎn)全部利用數(shù)組存儲(chǔ)起來,然后對(duì)所有的點(diǎn)進(jìn)行位置標(biāo)記。接著,我們?nèi)グ错樞蛟L問所有有垃圾的點(diǎn)(x,y),對(duì)于每個(gè)點(diǎn),我們都有以下操作:

  • 根據(jù)該點(diǎn)判斷該點(diǎn)是否適合作為垃圾點(diǎn)。如果合適就進(jìn)行下個(gè)操作;否則,訪問下一個(gè)點(diǎn)。
  • 根據(jù)四個(gè)對(duì)角位置存在多少處垃圾對(duì)該回收站點(diǎn)進(jìn)行評(píng)分,接著該分?jǐn)?shù)的站點(diǎn)數(shù)加一。

對(duì)于坐標(biāo)點(diǎn)的存儲(chǔ),可以定義 PointPointPoint 結(jié)構(gòu)體,也可以直接用C++ STL提供的 pair<int,int>pair<int, int>pair<int,int> 進(jìn)行存儲(chǔ)。下面代碼中對(duì)于兩種方法都有涉及,其實(shí)只用一種就夠了,但是如果只用定義 PointPointPoint 結(jié)構(gòu)體的方法的話,需要重載==運(yùn)算符;

對(duì)于點(diǎn)的標(biāo)記,可以考慮用C++ STL提供 setsetset 或者 mapmapmap,也可直接用數(shù)組順序存儲(chǔ)標(biāo)記,但是每次查找都需要用 O(n)O(n)O(n) 的時(shí)間復(fù)雜度去遍歷。

坑點(diǎn):

  • 雖然點(diǎn)的個(gè)數(shù)不多,但是單個(gè)點(diǎn)的坐標(biāo)可以到 10910^9109,所以不能直接開二維數(shù)組來進(jìn)行地圖標(biāo)記。

代碼如下

#include <bits/stdc++.h> using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; const int maxn = 1e3 + 10; struct Point {int x, y; } p[maxn]; set<pair<int, int> > vis;int n, score[10];/*** 判斷點(diǎn)(x, y)是否適合作為回收站* 如果適合,就返回1;否則返回0*/ int isSuit(int x, int y) {if (!vis.count(pair<int , int>(x + 1, y))) return 0; if (!vis.count(pair<int , int>(x - 1, y))) return 0;if (!vis.count(pair<int , int>(x, y + 1))) return 0;if (!vis.count(pair<int , int>(x, y - 1))) return 0;return 1; } /*** 計(jì)算點(diǎn)(x, y)作為回收站可以得到的評(píng)分* 返回評(píng)分*/ int getScore(int x, int y) {int res = 0;if (vis.count(pair<int , int>(x + 1, y + 1))) res++;if (vis.count(pair<int , int>(x + 1, y - 1))) res++;if (vis.count(pair<int , int>(x - 1, y + 1))) res++;if (vis.count(pair<int , int>(x - 1, y - 1))) res++;return res; }int main() {//freopen("2.txt", "r", stdin);scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d %d", &p[i].x, &p[i].y);vis.insert(pair<int, int>(p[i].x, p[i].y));}for (int i = 1; i <= n; i++) {if (isSuit(p[i].x, p[i].y)) {score[getScore(p[i].x, p[i].y)]++;}}for (int i = 0; i <= 4; i++) printf("%d\n", score[i]);return 0; }

總結(jié)

以上是生活随笔為你收集整理的ccf-csp #201912-2 回收站选址的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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