9.28 剑心互娱笔试
1、模拟小飞机游戏; 100%;
#include <iostream>
#include <vector>
using namespace std;
long ret = 0;
long path = 1;
void get_dis(vector<string>& num_map, vector<vector<bool>>& vis, int x, int y){
if( !(x>=0&& x< num_map.size() && y>=0 && y< 8) || num_map[x][y] == '1' || vis[x][y]){
return;
}
ret = max(path, ret);
vis[x][y] = true;
get_dis(num_map, vis, x, y+1);
get_dis(num_map, vis, x, y-1);
path += 1;
get_dis(num_map, vis, x+1, y);
path -= 1;
}
int GetFarthestRoad(vector<uint8_t>& vecRoad)
{
// todo
vector<string> num_map;
for(int i=0; i< vecRoad.size(); i++){
string map_i(8, '0');
uint8_t num = vecRoad[i];
int idx = 0;
while(num){
if(num % 2){
map_i[idx] = '1';
}
idx++;
num >>= 1;
}
num_map.push_back(map_i);
}
bool fig = false;
for(int i=0; i< 8; i++){
if(num_map[0][i] == '0'){
if(!fig)
ret = 1;
fig = true;
vector<vector<bool>> vis(num_map.size(), vector<bool>(8, false));
get_dis(num_map, vis, 0, i);
}
}
return ret;
}
int main() {
vector<uint8_t> vecRoad;
int tmp;
while (cin >> tmp)
vecRoad.push_back((uint8_t)tmp);
cout<<GetFarthestRoad(vecRoad);
return 0;
} 2、进水出水问题; 100%;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param m int整型 水池容量
* @param t int整型 总时长
* @param m1 int整型 进水阀打开时每分钟进水量
* @param t1 int整型 进水阀开关切换时长
* @param m2 int整型 排水阀打开时每分钟排水量
* @param t2 int整型 排水阀开关切换时长
* @return int整型
*/
int ComputeRemanentWater(int m, int t, int m1, int t1, int m2, int t2) {
// write code here
int time = 0;
bool in_fig = true, out_fig = true;
int cap = 0;
while(time< t){
if(in_fig && out_fig){
cap = cap + (m1-m2);
cap = min(cap, m);
cap = max(0, cap);
}
else if(in_fig){
cap = min(cap+m1, m);
}
else if(out_fig){
cap = max(0, cap-m2);
}
time += 1;
if(time % t1 == 0){
in_fig = in_fig? false: true;
}
if(time % t2 == 0){
out_fig = out_fig? false: true;
}
}
return cap;
}
}; 3、给定三角形得三个点,判断三角形覆盖得正方形个数; 思路:模拟,不想做 4、有4种购买策略,分别对应于不同的格子,每个格子可以放比他小的商品,现给一堆商品,给出最小的花费;思路:暴力回溯,不想做
#剑心互娱#
