NO.1
思路:直接计算结果,先计算怪物可以抗几次攻击,再计算勇士受到的伤害,如果勇士的攻击力大于等于怪物的血量,那么就可以击杀无数只,如果勇士的血量正好是受到攻击的整数倍,那么击杀的怪物数量就减一。
代码实现:
#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的哈希表可以去重。
代码实现:
#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就可以了。
代码实现:
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);
}
}
}
};