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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

蓝桥杯 - 试题 H: 扫雷(思维)

發布時間:2024/4/11 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯 - 试题 H: 扫雷(思维) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


題目大意:給出 nnn 個地雷和 mmm 個炸彈,都以 (x,y,r)(x,y,r)(x,y,r) 的形式給出,意義分別如下:

  • 對于每個地雷,位于點 (x,y)(x,y)(x,y),爆炸后會波及半徑為 rrr 的圓形區域
  • 對于每個炸彈,會在點 (x,y)(x,y)(x,y) 爆炸,爆炸后會引爆半徑為 rrr 的圓形區域內的地雷,隨后地雷會 “連鎖反應” 的爆炸
  • 問使用過 mmm 個炸彈后,一共可以引爆多少個地雷

    題目分析:(賽時讀錯題了,怪不得當時算復雜度的時候能多算一個 logloglog 出來)

    最初的思想肯定是,先讓可以“連鎖反應”的地雷建立關系,這樣引爆其中的一個地雷后,由“連鎖反應”所引爆的地雷就不會被重復判斷了,可以做到每個地雷至多被遍歷一次。

    需要發現一個很重要的細節就是,地雷引爆的關系是單向的,如果地雷 A 可以引爆地雷 B ,不一定能得出地雷 B 可以引爆地雷 A

    所以整個“連鎖反應”是一個有向圖,不能使用并查集處理連通性。在建出有向圖后索性直接用 dfs 暴力遍歷即可,因為上面的思路已經保證了每個地雷至多遍歷一次,所以 dfs 的復雜度是線性的

    現在的問題轉換為該如何快速建邊,觀察數據范圍不難發現半徑 rrr 給的特別小,所以可以將圓心用 map 映射一下,然后每次只需要遍歷圓內的點嘗試建邊就好了

    時間復雜度:O(n?320?logn)O(n*320*logn)O(n?320?logn),這里的 320320320 代表的是半徑為 101010 的圓內的點數

    代碼:

    #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=5e4+100; struct Point {int x,y,r;void input() {scanf("%d%d%d",&x,&y,&r);} }p1[N],p2[N]; bool vis[N]; map<pair<int,int>,vector<int>>mp; vector<int>node[N]; int dfs(int u) {if(vis[u]) {return 0;}vis[u]=true;int ans=1;for(auto v:node[u]) {ans+=dfs(v);}return ans; } int main() {int n,m;cin>>n>>m;for(int i=1;i<=n;i++) {p1[i].input();mp[{p1[i].x,p1[i].y}].push_back(i);}for(int i=1;i<=m;i++) {p2[i].input();}for(int i=1;i<=n;i++) {for(int dx=-10;dx<=10;dx++) {for(int dy=-10;dy<=10;dy++) {LL x=p1[i].x,y=p1[i].y;LL xx=x+dx,yy=y+dy;LL r=p1[i].r;if((x-xx)*(x-xx)+(y-yy)*(y-yy)<=r*r) {for(auto j:mp[{xx,yy}]) {node[i].push_back(j);}}}}}int ans=0;for(int i=1;i<=m;i++) {for(int dx=-10;dx<=10;dx++) {for(int dy=-10;dy<=10;dy++) {LL x=p2[i].x,y=p2[i].y;LL xx=x+dx,yy=y+dy;LL r=p2[i].r;if((x-xx)*(x-xx)+(y-yy)*(y-yy)<=r*r) {for(auto j:mp[{xx,yy}]) {ans+=dfs(j);}}}}}cout<<ans<<endl;return 0; }

    總結

    以上是生活随笔為你收集整理的蓝桥杯 - 试题 H: 扫雷(思维)的全部內容,希望文章能夠幫你解決所遇到的問題。

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