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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

AcWing 1402. 星空之夜 1月28

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AcWing 1402. 星空之夜 1月28 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AcWing 1402. 星空之夜 1月28

題意:

一個星群是指一組非空的在水平,垂直或對角線方向相鄰的星星的集合。
一個星群不能是一個更大星群的一部分。
星群可能是相似的。
如果兩個星群的形狀、包含星星的數目相同,那么無論它們的朝向如何,都認為它們是相似的。
給定一個夜空二維矩陣,請你將其中的所有星群用小寫字母進行標記,標記時相似星群用同一字母,不相似星群用不同字母。

題解:

本題的關鍵在于如何判斷兩個星群是否相似,也就是如何分配字母的問題。題目說了相似說明兩個星群形狀一樣,與方向無關,形狀這一特征我們可以從每個星星與其他星星的距離和來表示
對于每一個星群,計算其內部距離和,然后看之前是否出現過,出現過則給之前的字母,若沒出現則根據出現順序賦予字母

代碼:

代碼思路肯定是對的,但是不知道哪錯了

#include<bits/stdc++.h> typedef long long ll; using namespace std; inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w; } int dy[9]={-1,0,1,-1,1,-1,0,1},dx[9]={-1,-1,-1,0,0,1,1,1}; const int maxn=600; char a[maxn][maxn]; char newa[maxn][maxn]; int w,h; vector<pair<int,int> >c; vector<ll>mapp; void dfs(int x,int y) {a[x][y]='0';c.push_back({x,y});for(int i=0;i<=7;i++){int tx=x+dx[i];int ty=y+dy[i];if(a[tx][ty]=='0'||tx>h||tx<=0||ty>w||ty<=0)continue;dfs(tx,ty);} } ll getsum() {ll sum=0;for(int i=0;i<c.size();i++){for(int j=i+1;j<c.size();j++){sum+=(c[i].first-c[j].first)*(c[i].first-c[j].first)+(c[i].second-c[j].second)*(c[i].second-c[j].second);}}return sum; } char check(ll sum) {for(int i=0;i<mapp.size();i++){if(mapp[i]==sum)return (char)('a'+i);}char neww='a'+mapp.size();mapp.push_back(sum);return neww; } void fill(char x) {for(int i=0;i<c.size();i++){newa[c[i].first][c[i].second]=x;} } int main() {memset(newa,'0',sizeof(newa));cin>>w>>h;for(int i=1;i<=h;i++){for(int j=1;j<=w;j++){cin>>a[i][j];}//char ch=getchar();}for(int i=1;i<=h;i++){for(int j=1;j<=w;j++){if(a[i][j]=='1'){dfs(i,j);ll sum=getsum();char x=check(sum);fill(x);c.clear();}}}for(int i=1;i<=h;i++){for(int j=1;j<=w;j++){printf("%c",newa[i][j]);}printf("\n");} }

總結

以上是生活随笔為你收集整理的AcWing 1402. 星空之夜 1月28的全部內容,希望文章能夠幫你解決所遇到的問題。

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