Day 5
目录
- 1.游游的you(pass)
- 1.1 解析
- 1.2 代码
- 2.腐烂的苹果 (多源bfs)
- 2.1 解析
- 2.2 代码
- 3.孩子们的游戏(圆圈中最后剩下的数) (pass)
- 3.1 解析
- 3.2 代码
1.游游的you(pass)
游游的you
技能:贪心
1.1 解析
1.2 代码
#include <iostream>
using namespace std;
int main()
{
int q=0;
int a,b,c;
cin>>q;
while(q--)
{
cin>>a>>b>>c;
int x=min(a,min(b,c));
cout<<(x*2+max(b-x-1,0))<<endl;
}
}
2.腐烂的苹果 (多源bfs)
NC398 腐烂的苹果
技能:多源bfs+最短路
2.1 解析
2.2 代码
class Solution {
public:
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int m,n;
bool vis[1001][1001]={0};
int rotApple(vector<vector<int> >& grid) {
queue<pair<int,int>> qt;//创建一个队列
m=grid.size(),n=grid[0].size();
for(int i=0;i<m;i++)//寻找腐烂的苹果,将它丢到队列里面
for(int j=0;j<n;j++)
if(grid[i][j]==2)
qt.push({i,j});
int ret=0;//记录结果
while(!qt.empty())
{
ret++;
int size=qt.size();
while(size--)
{
auto [x,y]=qt.front();
qt.pop();
for(int k=0;k<4;k++)
{
int a=x+dx[k],b=y+dy[k];
if(a>=0&&a<m&&b>=0&&b<n&&!vis[a][b]&&grid[a][b]==1)
{
vis[a][b]=true;
qt.push({a,b});
}
}
}
}
//查看网格中是否存在1&&该位置没有被标记
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(grid[i][j]==1&&!vis[i][j]) return -1;
}
}
return ret-1;
}
};
3.孩子们的游戏(圆圈中最后剩下的数) (pass)
孩子们的游戏(圆圈中最后剩下的数)
技能:dfs/模拟
3.1 解析
3.2 代码
//动态规划
int LastRemaining_Solution(int n, int m) {
vector<int> dp(n+1);//创建dp表
dp[1]=0;
for(int i=2;i<=n;i++)//填表
dp[i]=(dp[i-1]+m)%i;
return dp[n];
}