目录
078:kotori和气球
题目:
题解:
排列组合:
#include<iostream>
using namespace std;
const int MOD=109;
int n,m;
int main()
{
cin>>n>>m;
int ret=n;
for(int i=0;i<m-1;i++)
{
ret=ret*(n-1)%MOD;
}
cout<<ret<<endl;
return 0;
}
079:走迷宫
题目链接:走迷宫_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
bfs简单应用
#include <iostream>
#include<queue>
using namespace std;
int n,m,ret=0;
int xs,ys,xt,yt;
char grid[1010][1010];
bool vis[1010][1010]={0};
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
int bfs()
{
if(grid[xt][yt]=='*') return -1;
queue<pair<int,int>> q;
q.push({xs,ys});
vis[xs][ys]=true;
while(q.size())
{
ret++;
int t=q.size();
while(t--)
{
auto [a,b]=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int x=a+dx[i],y=b+dy[i];
if(x>=1 && x<=n && y>=1 && y<=m && grid[x][y]=='.' && !vis[x][y])
{
q.push({x,y});
vis[x][y]=true;
if(x==xt && y==yt) return ret;
}
}
}
}
return -1;
}
int main()
{
cin>>n>>m;
cin>>xs>>ys>>xt>>yt;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>grid[i][j];
}
}
cout<<bfs()<<endl;
return 0;
}
080:主持人调度
题目链接:主持人调度(二)_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
1.按左端点排序
2.建一个小根堆(只存放活动的结束时间),先放第一个区间
3.遍历后面的区间
1)区间中开始时间大于等于堆中top(最小)的,用该区间的结束时间直接覆盖这个数。
2)区间中开始时间小于堆中top(最小)的,直接插入该区间到堆中,多加一个主持人。
class Solution {
public:
int minmumNumberOfHost(int n, vector<vector<int> >& startEnd)
{
sort(startEnd.begin(),startEnd.end());
priority_queue<int,vector<int>,greater<int>> heap;//创建一个小根堆
heap.push(startEnd[0][1]);//把第一个区间放进去
for(int i=1;i<n;i++)//剩下的区间依次放进去
{
int a=startEnd[i][0],b=startEnd[i][1];
if(a>=heap.top())//与最早结束的主持人没有重叠
{
heap.pop();
heap.push(b);
}
else
{
heap.push(b);//新加一个主持人
}
}
return heap.size();
}
};