2024.3.3 学习日志

本文是第一篇学习日志。

下午,去补了下之前的根号算法,看了T2  Chef and Churu  的题解,感觉只能理解70%,先不打算写了,明天在来理解一遍。

去写了下 2009 的 NOIP 真题,T2第一眼甚至不会。。。

贴下T1的代码(很水)

#include<bits/stdc++.h>
//#define int long long
#define debug puts("原始人,启洞!");
using namespace std;
const int N = 1e5 + 10;
map<char, char> mp;
map<char, bool> flag;
char ch1[N], ch2[N], ch3[N];
int tot;
int main() {
//	freopen(".in", "r", stdin);
//	freopen(".out", "w", stdout);
	scanf("%s%s%s", ch1 + 1, ch2 + 1, ch3 + 1);
	int len = strlen(ch1 + 1);
	// cout << len << endl;
	for(int i = 1; i <= len; i++){
		if(!mp[ch1[i]] && !flag[ch2[i]]){
			mp[ch1[i]] = ch2[i];
			flag[ch2[i]] = 1;
			tot++;
			if(tot >= 26) break;
		}else{
			cout << "Failed" << endl;
			return 0;
		}
	}
	if(tot < 26){
		cout << "Failed" << endl;
		return 0;
	}
	len = strlen(ch3 + 1);
	for(int i = 1; i <= len; i++){
		if(!mp[ch3[i]]){
			cout << "Failed" << endl;
			return 0;
		}
		cout << mp[ch3[i]];
	}
    return 0;
}//by hwl

还有T2

我推理好一会式子。。。可以退役了。。。

总体思路就是:

x只可能是b1的因子,所以我们可以枚举b1的所有因子。

然后分别判断gcd(x,a0)=a1, lcm(x,b0)=b1是否成立就行了。

但是我们数字非常大直接这么干会TLE,考虑优化。

对于式子gcd(x,  a0)=a1和 lcm(x,b0)=b1可推得:

1.gcd(x/a1,a0/a1)=1

2.gcd(b1/x,b1/b0)=1

只需判断以上两个条件就行了。

#include<bits/stdc++.h>
//#define int long long
#define debug puts("原始人,启洞!");
using namespace std;
const int N = 1e5 + 10;
int main() {
//	freopen(".in", "r", stdin);
//	freopen(".out", "w", stdout);
	int n, a0, a1, b0, b1;
	cin >> n;
	for(int _ = 1; _ <= n; _++){
		int ans = 0;
		cin >> a0 >> a1 >> b0 >> b1;
		for(int i = 1; 1ll * i * i <= b1; i++){
			if(b1 % i == 0 && i % a1 == 0){
				if(__gcd(i / a1, a0 / a1) == 1 && __gcd(b1 / i, b1 / b0) == 1) ans++;
			}
			if(i * i != b1 && b1 % i == 0 && (b1 / i) % a1 == 0)
				if(__gcd((b1 / i) / a1, a0 / a1) == 1 && __gcd(b1 / (b1 / i), b1 / b0) == 1) ans++;
		}
		cout << ans << endl;
	}
    return 0;
}//by hwl

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值