游游的you
题目链接:游游的you__牛客网 (nowcoder.com)
思路:o 可以用作拼you 和 oo 但如果拼出you 2分 大于oo 一分 即若有o 优先去拼you 剩下的再拼oo。
AC code:
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
void slove(){
int a,b,c,ans = 0;
cin >> a >> b >> c;
int minn = min(min(a,b),c);
ans = minn * 2;
b -= minn;
if(b>=2)
ans += --b;
cout << ans << endl;
}
signed main(){
ios::sync_with_stdio;
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--)
slove();
return 0;
}
NC398 腐烂的苹果
题目链接:腐烂的苹果_牛客题霸_牛客网 (nowcoder.com)
思路:BFS模板题 时间抽象成距离即可 对于每个点位的距离 我们只要第一次更新 即为最短距离。
最后遍历一遍有没有好苹果即可。
AC code:
typedef pair<int, int> PII;
const int N = 1010;
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
int ans = -1;
PII q[N * N];
int d[N][N];
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param grid int整型vector<vector<>>
* @return int整型
*/
int rotApple(vector<vector<int> >& grid)
{
int n = grid.size();
int m = grid[0].size();
memset(d,-1,sizeof d);
int hh = 0, tt = 0;
for(int i = 0; i < n; i ++)
for(int j = 0; j < m; j ++)
if(grid[i][j] == 2)
{
q[tt++] = {i,j};
d[i][j] = 0;
}
while(hh <= tt)
{
auto t = q[hh ++];
int a = t.first, b = t.second;
for(int i = 0; i < 4; i ++)
{
int x = a + dx[i], y = b + dy[i];
if(x >= 0 && x < n && y >= 0 && y < m && d[x][y] == -1 && grid[x][y] == 1)
{
d[x][y] = d[a][b] + 1;
grid[x][y] = 2;
//cout << x << ' ' <<y << ' ' <<d[x][y] << endl;
ans = max(ans, d[x][y]);
q[tt++] = {x,y};
}
}
}
for(int i = 0; i < n; i ++)
for(int j = 0; j < m; j ++)
if(grid[i][j] == 1)
return -1;
return ans;
}
};
JZ62 孩子们的游戏(圆圈中最后剩下的数)
题目链接:孩子们的游戏(圆圈中最后剩下的数)_牛客题霸_牛客网 (nowcoder.com)
思路:约瑟夫问题可用优先队列 循环列表 但时间复杂度O(n*m),故可考虑 线段树 和 数学知识,
此题对于答案格式 采用数学知识对约瑟夫环的推导。
详情见:这或许是你能找到的最详细约瑟夫环数学推导! - 知乎 (zhihu.com)
AC code:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param m int整型
* @return int整型
*/
int LastRemaining_Solution(int n, int m)
{
int s = 0;
for(int i = 2;i <= n;i++)
{
s=(s+m)%i;
}
return s;
}
};