POJ1562-Oil Deposits && HDOJ1241

GerJCS岛 / 2024-09-19 / 原文

接着刷邝斌飞搜索专题

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,纸盒考研等电梯研究队列
View Code

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         }
View Code