目录
P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 (luogu.com.cn)
P8748 [蓝桥杯 2021 省 B] 时间显示 - 洛谷 (luogu.com.cn)
P10900 [蓝桥杯 2024 省 C] 数字诗意 - 洛谷 (luogu.com.cn)
P10424 [蓝桥杯 2024 省 B] 好数 - 洛谷 (luogu.com.cn)
P8754 [蓝桥杯 2021 省 AB2] 完全平方数 - 洛谷 (luogu.com.cn)
P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 (luogu.com.cn)
可以设两个数组a和b,a中的数除以区间内的数永远等于b中的数,现在要找的就是这个区间。
a[i]/区间=b[i]可以转化为a[i]/b[i]=区间
先找区间内最大的数,该数如果要满足条件,那么该数就是a[i]/b[i]每一项中最小的数,遍历一遍即可找到
再找区间内最小的数,只要最大的数依次向下减一逐个验证即可
- #include
- #include
- #include
- #include
- using namespace std;
- int main() {
- int n;
- cin >> n;
- vector<int> a(n);
- vector<int> b(n);
- int t = INT_MAX;
- int max = 0;
- for (int i =0; i < n; i++) {
- cin >> a[i] >> b[i];
- t = min(t, a[i] / b[i]);
- }
- for (int k = t; k >= 0; k--) {
- for (int i = 0; i < n; i++) {
- if (a[i] / k != b[i]) {
- cout << (k + 1) << " " << t << endl;
- return 0;
- }
- }
- }
- }
P8748 [蓝桥杯 2021 省 B] 时间显示 - 洛谷 (luogu.com.cn)
简单的时间转化计算,唯一要注意的点是怎么把0打印出来
- #include
- using namespace std;
- #define int long long
- signed main() {
- int n;
- cin >> n;
- n /= 1000;
- n = n % (24 * 60 * 60);
- int hour = n / 3600;
- n %= 3600;
- int minute = n / 60;
- int second = n % 60;
- printf("%02lld:%02lld:%02lld", hour, minute, second);
- return 0;
- }
P10900 [蓝桥杯 2024 省 C] 数字诗意 - 洛谷 (luogu.com.cn)
除1以外的奇数都符合,怎么找?奇数除以2,比如13/2==6,加上1,6+7=13
偶数的话,可以分解为奇数,比如24=8*3,3是符合的,那么这个偶数也是符合的,可以用等差数列的原理来证明
除了2的倍数,逐级往下分最后只能分出来1,但1是不符合的
所以问题转变成了找2的倍数有多少个
这里提供一种方法,2的倍数(假设为t)转换成2进制后只有一个1,其它位置都是0,所以只要判断(t & (t - 1)是否等于0,等于的话就是2的倍数
- #include
- #define int long long
- using namespace std;
- signed main() {
- int n, t;
- cin >> n;
- int count = 0;
- for (int i = 0; i < n; i++) {
- cin >> t;
- if ((t & (t - 1)) == 0) count++;
- }
- cout << count << endl;
- return 0;
- }
P10424 [蓝桥杯 2024 省 B] 好数 - 洛谷 (luogu.com.cn)
感觉在函数中用while循环是最方便的
- #include
- using namespace std;
- bool jud(int n) {
- //奇数false,偶数true
- bool flag = false;
- while (n) {
- if (flag) {
- //偶数位是奇数则不是好数
- if ((n % 10) % 2 != 0)return false;
- }
- else {
- //奇数位是偶数则不是好数
- if ((n % 10) % 2 == 0)return false;
- }
- n /= 10;
- flag = !flag;
- }
- return true;
- }
- int main() {
- int n;
- cin >> n;
- int count = 0;
- for (int i = 1; i <= n; i++) {
-
- if (jud(i))count++;
- }
- cout << count << endl;
- return 0;
- }
P8754 [蓝桥杯 2021 省 AB2] 完全平方数 - 洛谷 (luogu.com.cn)
- #include
- using namespace std;
- #define int long long
- signed main() {
- int n;
- cin >> n;
- int res = 1;
- for (int i = 2; i * i <= n; i++) {
- int count = 0;
- while (n % i == 0) {
- count++;
- n /= i;
- }
- if (count % 2 == 1) res *= i;
- }
- if (n > 1) res *= n;
- cout << res;
- return 0;
- }
评论记录:
回复评论: