暑期培训 Day 12 <做不完的题QWQ>

今天来做做csp-j 2022的题!!!

怎么说呢,虽然说 csp-j 一般是初中生去考,但是对于我这种弱市弱校的超级蒟蒻,还是可以去看看的(because csp-s 的题的难度都是普及+和提高,太难了QWQ,呜呜)

- [1] [CSP-j 2022] 乘方

题目描述

小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 ab,求 ab 的值是多少。
abba 相乘的值,例如 23 即为 32 相乘,结果为 2×2×2=8
“简单!”小文心想,同时很快就写出了一份程序,可是测试时却出现了错误。
小文很快意识到,她的程序里的变量都是 int 类型的。在大多数机器上,int 类型能表示的最大数为 2311,因此只要计算结果超过这个数,她的程序就会出现错误。
由于小文刚刚学会编程,她担心使用 int 计算会出现问题。因此她希望你在 ab 的值超过 109 时,输出一个 -1 进行警示,否则就输出正确的 ab 的值。
然而小文还是不知道怎么实现这份程序,因此她想请你帮忙。

输入格式

输入共一行,两个正整数 a,b

输出格式

**输出共一行,如果 ab 的值不超过 109,则输出 ab 的值,否则输出 -1。

样例 #1

样例输入 #1

10 9

样例输出 #1

1000000000

样例 #2

样例输入 #2

23333 66666

样例输出 #2

-1

提示

对于 10 %的数据,保证 b = 1。
对于 30 % 的数据,保证 b2
对于 60 % 的数据,保证 b30ab1018
对于 100 % 的数据,保证 1a,b109
upd 2022.11.14:新增加一组 Hack 数据。

一看就知道是签到题QWQ,还是very简单的

我直接一手快速幂,然后听取wa声一片,我就晓得有个奇怪的bug点没有考虑到(我***)!!!

罢了罢了,看看题解吧。

然后想着想着发现其实暴力也可以,什么题解啊,没意思,我直接暴力,时间还比你快QWQ

代码实现:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	long long res=1;
	scanf("%d%d",&a,&b);
	for(int i=1;i<=b;i++){
		res=res*a;
		if(res>1e9){
			printf("-1");
			return 0;	
		} 
	}
	printf("%lld",res);
	return 0;
}

- [2] [CSP-J 2022] 解密

题目描述

给定一个正整数 k,有 k 次询问,每次给定三个正整数 ni,ei,di,求两个正整数 pi,qi,使 ni=pi×qiei×di=(pi1)(qi1)+1

输入格式

第一行一个正整数 k,表示有 k 次询问。
接下来 k 行,第 i 行三个正整数 ni,di,ei

输出格式

输出 k 行,每行两个正整数 pi,qi 表示答案。
为使输出统一,你应当保证 piqi
如果无解,请输出 NO

样例 #1

样例输入 #1

10
770 77 5
633 1 211
545 1 499
683 3 227
858 3 257
723 37 13
572 26 11
867 17 17
829 3 263
528 4 109

样例输出 #1

2 385
NO
NO
NO
11 78
3 241
2 286
NO
NO
6 88

【数据范围】
以下记 m=ne×d+2
保证对于 100% 的数据,1k105,对于任意的 1ik1ni10181ei×di1018
1m109

测试点编号 k n m 特殊性质
1 103 103 103 保证有解
2 103 103 103
3 103 109 6×104 保证有解
4 103 109 6×104
5 103 109 109 保证有解
6 103 109 109
7 105 1018 109 保证若有解则 p=q
8 105 1018 109 保证有解
9 105 1018 109
10 105 1018 109

乍一看,p 从 1 开始遍历,q 从 n[i] 开始遍历就可以了,but,如果有 1018109 这种变态数据,肯定会爆!!!(也就是超时);所以开始对方程进行化简:

那么:

然后就非常简单了撒QWQ,就是初中学的求根公式!!!

代码实现:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll k;
    scanf("%lld",&k);
    while (k--) {
        ll n,e,d;
        scanf("%lld%lld%lld",&n,&e,&d);
        ll bq = sqrt((n - e * d + 2) * (n - e * d + 2) - (n * 4));
        ll dq = n - e * d + 2;
        ll P = (bq + dq) / 2;
        ll Q = dq - P;
        if (P * Q == n && e * d == (P - 1) * (Q - 1) + 1 && P && Q) {
            printf("%lld %lld\n",min(P, Q),max(P, Q));
        }else printf("NO\n");
    }
    return 0;
}

至于剩下的 T3 与 T4,今天晚上还要改今天考试的题,是真的没时间写了,所以说这一天过的还是挺充实的,嘻嘻QWQ!!!

古德er拜————————————华丽的结束

posted @   DW_4  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示