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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NOIP模拟题——来自风平浪静的明天

發布時間:2025/7/25 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NOIP模拟题——来自风平浪静的明天 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目描述】
冬眠了五年,光終于從夢中醒來。
千咲、要,大家都在。
隱約記得“昨天”的海船祭,愛花意外成為貢女,沉入海底。
海面冰封,卻有絲絲暖流在冰面之下涌動。
此時,愛花沉睡在祭海女神的墓地。她的胞衣在一點點脫落,化作一簇簇暖流,夾雜著她的感情,向海面上涌去。
愛花,你在哪里?
五年之后,紡已經成為海洋學研究科的大學生。
在紡的幫助下,光得知了海面下海流的情況。
紡告訴光,暖流一旦產生,就會不斷地向四周擴散,直到遇到海中的巖石。
紅腹海牛,快告訴光,愛花在哪里。
紡幫你繪制了一張海流情況圖,長度為N,寬度為M。
海很大,一邊有沙灘,一邊一望無際,但長度和寬度都不會超過300。沙灘是金黃色的,所以用Y表示。海是藍色的,所以用B表示。暖流很暖和,所以用H表示
海中有大大小小的石頭。石頭很危險,所以用X表示
光相信自己一定能找到愛花(愛花的位置只有一種可能)
【輸入格式】
第一行包括兩個整數N,M。
接下來N行,每行M個字符。
【輸出格式】
僅一行,表示愛花的位置(如果你無能為力,請輸出 -1 ,只要你盡力,光不會責怪你)
【樣例輸入】
5 5
YYYHB
YYHHH
YHHXB
BBHBB
BBBBB
【樣例輸出】
2 3
【數據范圍】
對于30%的數據,n,m<=10
對于70%的數據,n,m<=100
對于100%的數據,n,m<=300
【樣例解釋】
在(2,3)出現第一個H后,經過3s后,出現樣例輸入的地圖。
P.S. Mushroom拜托他GF出的這題= =

?

題目寫的真好~~~~~~~~~~只是我看不懂。

后來才曉得一開始給的圖只是一個普通狀態而不是最終狀態(所以就誤將碰到石頭理解為再向下漫延一次就停下來了。。)

正解:f[T][x][y]表示從map[x][y]開始,漫延時間為T的情況是否匹配

(不應是H的地方出現了H則不相符,應出現H的地方沒有出現H認為相符)

?

YYYHB
YYHHH
YHHXB
BBHBB
BBBBB
海流圖
YYYBB
YYHHB
YBHXB
BBBBB
BBBBB
相符的圖(藍色部分應該出現H但沒有出現)
YYYHH
YYHHH
YHHXH
BHHHB
BBHBB
不相符的圖(紅色部分不該出現H但出現了)

?

于是得到DP方程:F[T][X][Y]=F[T-1][X-1][Y]&&F[T-1][X][Y-1]&&F[T-1][X+1][Y]&&F[T-1][X][Y+1]

時間復雜度O(n3)

1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 using namespace std; 7 const int maxn=305; 8 char map[maxn][maxn]; 9 bool f[2*maxn][maxn][maxn]; 10 bool pd[2*maxn][maxn][maxn]; 11 char c[maxn]; 12 int n,m; 13 bool solve(int T,int x,int y) 14 { 15 if(pd[T][x][y])return f[T][x][y]; 16 if(x==0||y==0)return true; 17 if(x==n+1||y==m+1)return true; 18 if(map[x][y]!='H')return true; 19 if(T==0) 20 { 21 pd[T][x][y]=true; 22 f[T][x][y]=true; 23 return true; 24 } 25 26 if(map[x-1][y]=='B'||map[x+1][y]=='B'||map[x][y-1]=='B'||map[x][y+1]=='B') 27 { 28 pd[T][x][y]=true; 29 f[T][x][y]=false; 30 return false; 31 } 32 33 pd[T][x][y]=true; 34 f[T][x][y]=solve(T-1,x-1,y)&&solve(T-1,x+1,y)&&solve(T-1,x,y-1)&&solve(T-1,x,y+1); 35 return f[T][x][y]; 36 } 37 int main() 38 { 39 freopen("calm.in","r",stdin); 40 freopen("calm.out","w",stdout); 41 scanf("%d%d",&n,&m); 42 for(int i=1;i<=n;i++) 43 { 44 scanf("%s",c); 45 for(int j=1;j<=m;j++) 46 map[i][j]=c[j-1]; 47 } 48 for(int i=1;i<=n+m;i++) 49 for(int j=1;j<=n;j++) 50 for(int k=1;k<=m;k++) 51 { 52 if(map[j][k]=='H') 53 solve(i,j,k); 54 } 55 for(int i=n+m;i>=1;i--) 56 for(int j=1;j<=n;j++) 57 for(int k=1;k<=m;k++) 58 { 59 if(f[i][j][k]) 60 { 61 printf("%d %d",j,k); 62 return 0; 63 } 64 } 65 return 0; 66 }

這個DP方程真心NB,考場上能想到這樣做就幸福了~

轉載于:https://www.cnblogs.com/937337156Zhang/p/6017461.html

總結

以上是生活随笔為你收集整理的NOIP模拟题——来自风平浪静的明天的全部內容,希望文章能夠幫你解決所遇到的問題。

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