九坤投资专场竞赛
写了三题,排名157,没到推荐的要求,要前100。比上午周赛的状态好点,感觉可能这题还难点,但是写的好点。(感觉越在意反而不能写好😔,也有可能上午就是涉及我不怎么遇到的题)
第一题:比普通easy难点,,需要转换一下.其实可以改为,A + B镜像 = A镜像 + B 为 B镜像 - B = A镜像 - A。 那么数对就是,差值相同,就可以组成数对。
第二题:普通dfs
第三题:数据乘下去可能会超级大,所以就用python写了,不用考虑超大的数。只用遍历一遍,求当前和前一个数的最大公倍数,并且判断 两个数到最大公倍数 的乘数 是不是2,3的倍数。
第四题:还想不出来怎么写
九坤-01. 可以读通讯稿的组数
class Solution {
public:
int numberOfPairs(vector<int>& nums) {
int n = nums.size();
vector<long long> dis(n);
map<long long,int> mp;;
int mod = 1e9+7;
for(int i=0;i<nums.size();i++) {
long long tmp = 0, x = nums[i];
while(x) {
tmp = tmp*10 + x%10;
x /= 10;
}
dis[i] = tmp - nums[i];
mp[dis[i]] += 1;
}
int ans = 0;
for(int i=0;i<n;i++) {
if(mp[dis[i]]>=2){
ans = (mp[dis[i]] -1 + ans) % mod;
mp[dis[i]] -= 1;
}
}
return ans;
}
};
九坤-02. 池塘计数
class Solution {
public:
int lakeCount(vector<string>& field) {
int n =field.size(), ans =0;
queue<pair<int,int>> q;
int dx[8] = {0,0,1,-1, 1,1,-1,-1};
int dy[8] = {1,-1,0,0, 1,-1,1,-1};
for(int i=0;i<n;i++) {
int m = field[i].size();
for(int j=0;j<m;j++) {
if(field[i][j]=='W'){
ans++;
field[i][j] = '.';
q.emplace(i,j);
while(!q.empty()) {
auto[x,y] = q.front();q.pop();
for(int k=0;k<8;k++) {
int nx = x+ dx[k];
int ny = y+ dy[k];
if(nx<0||ny<0||nx>=n||ny>=m) continue;
if(field[nx][ny]=='W') {
field[nx][ny] = '.';
q.emplace(nx,ny);
}
}
}
}
}
}
return ans;
}
};
九坤-03. 数字默契考验
class Solution:
def gcd(a,b):
if b!=0:
return gcd(b,a%b)
return a
def minOperations(self, numbers: List[int]) -> int:
ans = 0
flag = 0
pre = numbers[0]
def fuc(now, pre):
de = now / pre
ans = 0
if de == 1: return 0
while(de%3 == 0):
de = de//3
ans = ans + 1
while(de%2 == 0):
de = de//2
ans = ans + 1
if de!=1: return -1
return ans
for i in range(1,len(numbers)):
x = gcd(pre,numbers[i])
now = pre // x * numbers[i]
val1 = fuc(now,pre)
val2 = fuc(now,numbers[i])
if val1==-1 or val2==-1:
flag = 1
if flag:
break
ans = ans + val1*(i) + val2
pre = now
if flag: return -1;
return ans
本文含有隐藏内容,请 开通VIP 后查看