【强训笔记】day23

NO.1

思路:直接计算结果,先计算怪物可以抗几次攻击,再计算勇士受到的伤害,如果勇士的攻击力大于等于怪物的血量,那么就可以击杀无数只,如果勇士的血量正好是受到攻击的整数倍,那么击杀的怪物数量就减一。

代码实现:

cpp 复制代码
#include<iostream>

using namespace std;

int t;
int h,a,H,A;

int fun()
{
    if(a>=H) return -1;
    
    int m=(H/a)+(H%a!=0?1:0);
    int n=m-1;
    int x=n*A;
    int ret=h/x-(h%x==0?1:0);
    return ret;
}
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>h>>a>>H>>A;
        cout<<fun()<<endl;
    }
    return 0;
}

NO.2

思路:哈希表,利用set的哈希表可以去重。

代码实现:

cpp 复制代码
#include <iostream>
#include<string>
#include<algorithm>
#include<unordered_set>
using namespace std;

int n;
string s;

int main() {
   cin >> n;
 unordered_set<string> hash;
 while(n--)
 {
 cin >> s;
 sort(s.begin(), s.end());
 hash.insert(s);
 }
 cout<<hash.size()<<endl;
     }

NO.3

思路:dfs,定义一个bool数组用来标记,如果该位置为false,那么就ret++,再dfs搜索,dfs中将搜索过的位置的bool数组标记为true,再对该位置进行dfs搜索,搜索完后直接返回ret就可以了。

代码实现:

cpp 复制代码
class Solution {
public:
    bool vis[210]={0};
    int citys(vector<vector<int> >& m) {
        int n=m.size();
        int ret=0;
        for(int i=0;i<n;i++)
        {
            if(!vis[i])
            {
                ret++;
            }
            dfs(m,i);
        }
        return ret;
    }

    void dfs(vector<vector<int> >& m,int pos)
    {
        vis[pos]=true;
        for(int i=0;i<m.size();i++)
        {
            if(m[pos][i]&&!vis[i])
            {
                dfs(m,i);
            }
        }
    }
};
相关推荐
van叶~13 分钟前
算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝
c++·算法
简简单单做算法14 分钟前
基于Retinex算法的图像去雾matlab仿真
算法·matlab·图像去雾·retinex
云卓SKYDROID29 分钟前
除草机器人算法以及技术详解!
算法·机器人·科普·高科技·云卓科技·算法技术
半盏茶香1 小时前
【C语言】分支和循环详解(下)猜数字游戏
c语言·开发语言·c++·算法·游戏
徐子童1 小时前
双指针算法习题解答
算法
咔叽布吉1 小时前
【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection
论文阅读·笔记·目标检测
johnny2331 小时前
《大模型应用开发极简入门》笔记
笔记·chatgpt
想要打 Acm 的小周同学呀1 小时前
LRU缓存算法
java·算法·缓存
亦枫Leonlew1 小时前
微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems
笔记·数学·微积分·1024程序员节
小肥象不是小飞象1 小时前
(六千字心得笔记)零基础C语言入门第八课——函数(上)
c语言·开发语言·笔记·1024程序员节