满江红?!

P1002 [NOIP2002 普及组] 过河卒

可恶!我连哪里错了都不知道!
by LanQiao1234 @ 2023-10-05 23:29:41


@[LanQiao1234](/user/1127157) 马蜂有点怪异,我给你改一下哈(请稍等)。
by 2044_space_elevator @ 2023-10-05 23:45:25


@[LanQiao1234](/user/1127157) 给你调好了,我应该是唯一一个愿意帮你手把手改代码的人了,悬个 1-2 关不过分吧( 问题很多先看代码: ```cpp #include<iostream> #include<vector> #include<array> //能走到终点的道路数量 int ans=1; //判断是否已经在map_wall_counc()中生成完所有的墙 bool flag=false; // ! 不开 long long 见祖宗!!! std::vector<std::vector<long long> >dp (25, std::vector<long long> (25)); //* 尊重你的马蜂(doge) //终点的位置 std::pair<int,int> fin_node; //马的位置 std::pair<int,int> knight_node; //地图 std::array<std::array<int,24>,24> map{{}}; std::array<std::pair<int,int>,9> knight_move={{ {0,0}, {-1,2}, {1,2}, {2,1}, {2,-1}, {1,-2}, {-1,-2}, {-2,1}, {-2,-1} } }; //初始化,用于生成地图,经测试并无问题 void init(){ // ! 循环 i,j 遍历不要写反,搞清楚是 fin_node.first 在前还是 fin_node.second 在前 for (int i = 2; i <= fin_node.first+2; i++) for (int j = 2; j <= fin_node.second+2 ; j++) map[i][j]=1; for (auto i : knight_move) map[knight_node.first+i.first][knight_node.second+i.second]=0; map[2][2]=-1; map[fin_node.first+2][fin_node.second+2]=-2; } //这个函数用于将所有死路以及卒走不到的点记为墙 void map_wall_counc(){ // ! 这个函数我干掉了 } int main(){ std::cin>>fin_node.first>>fin_node.second>>knight_node.first>>knight_node.second; knight_node.first += 2; knight_node.second += 2; init(); //判定兵是否被堵死 if(map[2][3]==0&&map[3][2]==0){ std::cout<<0; return 0; } //数出所有分叉路口的数量 // ! 这里给你重构了 // !小兵如果已经被前面的马的控制点挡住不能往前走了,要直接 break 掉。 for (int i = 2; i <= fin_node.first + 2; i++) {if (map[i][2]) dp[i][2] =1; else break;}; for (int i = 2; i <= fin_node.second + 2; i++) {if (map[2][i]) dp[2][i]=1; else break;}; for (int i = 3; i <= fin_node.first + 2; i++) { for (int j = 3; j <= fin_node.second + 2; j++) { if (map[i][j]) { dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; } } } std::cout<<dp[fin_node.first + 2][fin_node.second + 2]; } ``` 我最大程度的尊重了你的源代码,现在说问题: - 循环内外写反,见第 34 行。这个你没察觉出来可能是因为样例组里 $n=m$,这种情况循环内外写反没啥区别。 - 没开 long long,于是你就在 Case \# 3 爆了。 - **小兵如果已经被前面的马的控制点挡住不能往前走了,要直接 break 掉。** 具体见注释吧,另外题主用的是 Vscode 的话,建议安装插件 `Better Comments`,我是把我的注释标红过的了,这样看更舒服一点。
by 2044_space_elevator @ 2023-10-06 00:39:55


|