POJ1562-Oil Deposits && HDOJ1241
接着刷邝斌飞搜索专题
POJ1562 1s 10000K
可用平台 1s 65536kB
洛谷 3s 0B
HDOJ1241 1s 32768K
太水了吧这题,10min写完代码,但感觉思维好弱边写边想,没法想好直接快速写
但这次洛谷和hdojAC了,poj和可用平台WA了
1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 using namespace std; 5 int m,n; 6 int map[100][100];//存地图 7 int dir[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}}; 8 int num; 9 int vis[100][100]; 10 int flag; 11 void dfs(int x,int y) 12 { 13 int thisx; 14 int thisy; 15 for(int i=0;i<8;i++){ 16 thisx=x+dir[i][0]; 17 thisy=y+dir[i][1]; 18 if(0<=thisx&&thisx<m&&0<=thisy&&thisy<n&& 19 map[thisx][thisy]=='@'&&vis[thisx][thisy]==0) 20 { 21 vis[thisx][thisy]=1; 22 dfs(thisx,thisy); 23 } 24 } 25 } 26 27 int main() 28 { 29 while(scanf("%d%d",&m,&n)&&m&&n){ 30 num=0; 31 flag=0; 32 memset(vis,0,sizeof(vis)); 33 getchar(); 34 for(int i=0;i<m;i++){ 35 for(int j=0;j<n;j++){ 36 scanf("%c",&map[i][j]); 37 } 38 getchar(); 39 } 40 41 for(int i=0;i<m;i++) 42 for(int j=0;j<n;j++){ 43 if(map[i][j]=='@'&&vis[i][j]==0){ 44 flag=1; 45 vis[i][j]=1; 46 dfs(i,j); 47 num=num+flag; 48 } 49 50 } 51 cout<<num<<endl; 52 } 53 }
这题是手在前,脑子在后,大概粗略写一遍就hdoj和洛谷AC了,这回轮到POJ和可用平台严谨了(可用平台一直挺严谨)
反复试验惊了,POJ的数据和洛谷数据输出居然不一样(这个题可用平台好像真的是从poj拉过来的数据,样例数据倒是一模一样)
用曾经的工具:different找不同,发现poj的数据5 5后面有个空格,操他妈的

回忆曾经北邮考研那些人连复制到控制台都不会,辅导HIT虹,辅导BUPT LXT,纸盒考研等电梯研究队列
看discss发现确实有多余空格(这题讨论区很精彩),想用字符串输入第一行,然后str[0],str[2]赋值给m,n,结果发现string或者char字符串,都是遇到空格就停止
想起来getline(),重新回顾参考博客
练习
1 #include<stdio.h> 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 string name; 7 getline(cin,name); 8 printf("%s\n",name.c_str()); 9 10 char name1[10]; 11 cin.getline(name1,13); 12 printf("%s\n",name1); 13 }//两种都可以索取第i个元素
用getline重写代码
1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 using namespace std; 5 int m,n; 6 int map[100][100];//存地图 7 int dir[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}}; 8 int num; 9 int vis[100][100]; 10 int flag; 11 void dfs(int x,int y) 12 { 13 int thisx; 14 int thisy; 15 for(int i=0;i<8;i++){ 16 thisx=x+dir[i][0]; 17 thisy=y+dir[i][1]; 18 if(0<=thisx&&thisx<m&&0<=thisy&&thisy<n&& 19 map[thisx][thisy]=='@'&&vis[thisx][thisy]==0) 20 { 21 vis[thisx][thisy]=1; 22 dfs(thisx,thisy); 23 } 24 } 25 } 26 27 int main() 28 { 29 string ShaBiPOJ; 30 while(getline(cin,ShaBiPOJ)&&ShaBiPOJ[0]!='0'&&ShaBiPOJ[2]!='0'){ 31 m=ShaBiPOJ[0]-48; 32 n=ShaBiPOJ[2]-48; 33 // cout<<m<<" "<<n<<endl; 34 num=0; 35 flag=0; 36 memset(vis,0,sizeof(vis)); 37 // getchar(); 38 for(int i=0;i<m;i++){ 39 for(int j=0;j<n;j++){ 40 scanf("%c",&map[i][j]); 41 } 42 getchar(); 43 } 44 45 for(int i=0;i<m;i++) 46 for(int j=0;j<n;j++){ 47 if(map[i][j]=='@'&&vis[i][j]==0){ 48 flag=1; 49 vis[i][j]=1; 50 dfs(i,j); 51 num=num+flag; 52 } 53 54 } 55 cout<<num<<endl; 56 } 57 } 58 59 //6 6 60 //*@@*** 61 //@**@** 62 //@***@* 63 //*@*@** 64 //**@**@ 65 //**@@@@
发现POJ又崩了,好样的!!我定义的string类型叫ShaBiPOJ真没白起
实验代码,getline遇到回车就结束,且是抛弃,不输出参考博客,也不存于缓冲区

1 string ShaBiPOJ; 2 while(getline(cin,ShaBiPOJ)&&ShaBiPOJ[0]!='0' 3 &&ShaBiPOJ[2]!='0'){ 4 m=ShaBiPOJ[0]-48; 5 n=ShaBiPOJ[2]-48; 6 // while(scanf("%d%d",&m,&n)&&m&&n){ 7 num=0; 8 flag=0; 9 memset(vis,0,sizeof(vis)); 10 getchar(); 11 for(int i=0;i<m;i++){ 12 for(int j=0;j<n;j++){ 13 scanf("%c",&map[i][j]); 14 } 15 getchar(); 16 } 17 for(int i=0;i<m;i++){ 18 for(int j=0;j<n;j++){ 19 printf("%c",map[i][j]); 20 } 21 cout<<endl; 22 }