前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSP-J第二轮试题-2022年-1.2题

CSP-J第二轮试题-2022年-1.2题

作者头像
用户2225445
发布2023-10-16 18:55:13
4140
发布2023-10-16 18:55:13
举报
文章被收录于专栏:IT从业者张某某
在这里插入图片描述
在这里插入图片描述

参考:

总结

本系列为CSP-J/S算法竞赛真题讲解,会按照年份分析每年的真题,并给出对应的答案。本文为2022年真题。 https://www.luogu.com.cn/problem/list?tag=343&page=1

[CSP-J 2022] 乘方

题目描述

小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数

a

b

,求

a^b

的值是多少。

a^b

b

a

相乘的值,例如

2^3

即为

3

2

相乘,结果为

2 \times 2 \times 2 = 8

“简单!”小文心想,同时很快就写出了一份程序,可是测试时却出现了错误。

小文很快意识到,她的程序里的变量都是 int 类型的。在大多数机器上,int 类型能表示的最大数为

2^{31} - 1

,因此只要计算结果超过这个数,她的程序就会出现错误。

由于小文刚刚学会编程,她担心使用 int 计算会出现问题。因此她希望你在

a^b

的值超过

{10}^9

时,输出一个 -1 进行警示,否则就输出正确的

a^b

的值。

然而小文还是不知道怎么实现这份程序,因此她想请你帮忙。

输入格式

从文件pow.in中读入数据。 输入共一行,两个正整数

a, b

输出格式

输出到文件pow.out中。 输出共一行,如果

a^b

的值不超过

{10}^9

,则输出

a^b

的值,否则输出 -1

样例 #1

样例输入 #1
代码语言:javascript
复制
10 9
样例输出 #1
代码语言:javascript
复制
1000000000

样例 #2

样例输入 #2
代码语言:javascript
复制
23333 66666
样例输出 #2
代码语言:javascript
复制
-1

提示

对于

10 \%

的数据,保证

b = 1

。 对于

30 \%

的数据,保证

b \le 2

。 对于

60 \%

的数据,保证

b \le 30

a^b \le {10}^{18}

。 对于

100 \%

的数据,保证

1 \le a, b \le {10}^9

\text{upd 2022.11.14}

:新增加一组

\text{Hack}

数据。

结题思路

解题流程 1.开a , b变量+输入 *特殊情况∶如果a等于1直接输出1 2.开变量n,每次循环里会增加—次a 3.for循环0~b-1次循环求幂 n求幂,每次乘a 判断最新的数字是否大于10^9 是:输出-1,结束运行 否:继续for循环 4.输出最终答案n 注意事项 1.两个变量记得开ll或者ull都行反正int过不了 2.场上freopen一的文件名别写错 3.想我这种手敲了10^9的数清楚几个0 4.n变量初始值为1

参考:https://www.luogu.com.cn/problem/P8813

代码语言:javascript
复制
//#include <bits/stdc++.h>
#include<cstdio>//必须包含cstdio头文件
#include<iostream>
using namespace std;

int main(){
	//freopen("test.in","r",stdin);
	//freopen("test.out","w",stdout);

	long long a,b,n=1;
	cin>>a>>b;
	if(a ==1 ){
        cout<<"1";
        return 0;
	}
	else{
        for(long long i=0;i<b;i++){

            n*=a;
            if(n > 1000000000){
                cout <<"-1";
                return 0;
            }
        }
	}

	cout<<n;

	//fclose(stdin);
	//fclose(stdout);

	return 0;
}

[CSP-J 2022] 解密

题目描述

给定一个正整数

k

,有

k

次询问,每次给定三个正整数

n_i, e_i, d_i

,求两个正整数

p_i, q_i

,使

n_i = p_i \times q_i

e_i \times d_i = (p_i - 1)(q_i - 1) + 1

输入格式

从文件decode.in中读入数据。

第一行一个正整数

k

,表示有

k

次询问。

接下来

k

行,第

i

行三个正整数

n_i, d_i, e_i

输出格式

输出到文件decode.out中。

输出

k

行,每行两个正整数

p_i, q_i

表示答案。

为使输出统一,你应当保证

p_i \leq q_i

如果无解,请输出 NO

样例 #1

样例输入 #1
代码语言:javascript
复制
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
代码语言:javascript
复制
2 385
NO
NO
NO
11 78
3 241
2 286
NO
NO
6 88

提示

【样例 #2】

见附件中的 decode/decode2.indecode/decode2.ans

【样例 #3】

见附件中的 decode/decode3.indecode/decode3.ans

【样例 #4】

见附件中的 decode/decode4.indecode/decode4.ans

【数据范围】

以下记

m = n - e \times d + 2

保证对于

100\%

的数据,

1 \leq k \leq {10}^5

,对于任意的

1 \leq i \leq k

1 \leq n_i \leq {10}^{18}

1 \leq e_i \times d_i \leq {10}^{18}

1 \leq m \leq {10}^9

测试点编号

k ≤ k \leq k≤

n ≤ n \leq n≤

m ≤ m \leq m≤

特殊性质

1 1 1

1 0 3 10^3 103

1 0 3 10^3 103

1 0 3 10^3 103

保证有解

2 2 2

1 0 3 10^3 103

1 0 3 10^3 103

1 0 3 10^3 103

3 3 3

1 0 3 10^3 103

1 0 9 10^9 109

6 × 1 0 4 6\times 10^4 6×104

保证有解

4 4 4

1 0 3 10^3 103

1 0 9 10^9 109

6 × 1 0 4 6\times 10^4 6×104

5 5 5

1 0 3 10^3 103

1 0 9 10^9 109

1 0 9 10^9 109

保证有解

6 6 6

1 0 3 10^3 103

1 0 9 10^9 109

1 0 9 10^9 109

7 7 7

1 0 5 10^5 105

1 0 18 10^{18} 1018

1 0 9 10^9 109

保证若有解则 p = q p=q p=q

8 8 8

1 0 5 10^5 105

1 0 18 10^{18} 1018

1 0 9 10^9 109

保证有解

9 9 9

1 0 5 10^5 105

1 0 18 10^{18} 1018

1 0 9 10^9 109

10 10 10

1 0 5 10^5 105

1 0 18 10^{18} 1018

1 0 9 10^9 109

k \leq
n \leq
m \leq

特殊性质

1
10^3
10^3
10^3

保证有解

2
10^3
10^3
10^3

3
10^3
10^9
6\times 10^4

保证有解

4
10^3
10^9
6\times 10^4

5
10^3
10^9
10^9

保证有解

6
10^3
10^9
10^9

7
10^5
10^{18}
10^9

保证若有解则

p=q
8
10^5
10^{18}
10^9

保证有解

9
10^5
10^{18}
10^9

10
10^5
10^{18}
10^9

https://www.luogu.com.cn/problem/P8814

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

int main(int argc, const char * argv[]) {
    long long k;
    scanf("%lld",&k);
    while (k--) {
        long long n,e,d;
        scanf("%lld%lld%lld",&n,&e,&d);
        long long PsubQ = sqrt((n - e * d + 2) * (n - e * d + 2) - (n * 4));
        long long PaddQ = n - e * d + 2;
        long long P = (PsubQ + PaddQ) / 2;
        long long Q = PaddQ - 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;
}

现场真题注意事项

https://cspoj.com/contest.php?cid=1002 Fus5yz4x3EcSJH1Z

注意事项

  1. 文件名(程序名和输入输出文件名)必须使用英文小写。(提交必须使用freopen()进行提交)
  2. C/C++ 中函数 main() 的返回值类型必须是 int,程序正常结束时的返回值必须是0。
  3. 提交的程序代码文件的放置位置请参考各省的具体要求。
  4. 因违反以上三点而出现的错误或问题,申述时一律不予受理。
  5. 若无特殊说明,结果的比较方式为全文比较(过滤行末空格及文末回车)。
  6. 程序可使用的栈空间内存限制与题目的内存限制一致。
  7. 全国统一评测时采用的机器配置为:Inter® Core™ i7-8700K CPU @3.70GHz,内存 32GB。上述时限以此配置为准。
  8. 只提供 Linux 格式附加样例文件。
  9. 评测在当前最新公布的 NOI Linux 下进行,各语言的编译器版本以此为准

/* 假设输入样例数据存在文件test.in中,输出样例数据存在文件test.out中, 则在CSP、NOI等比赛的代码中,需添加freopen、fclose语句, 内容详见模板代码如下。 */

代码语言:javascript
复制
#include <bits/stdc++.h>
#include<cstdio>//必须包含cstdio头文件
#include<iostream>
using namespace std;
 
int main(){
	freopen("test.in","r",stdin);
	freopen("test.out","w",stdout);
	
	cout<<"Hello NOI"<<endl;
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}

下面为函数的简介,详细可参见 http://www.cplusplus.com/reference/clibrary/cstdio/freopen.html 函数名:freopen 声明:FILE *freopen( const char *path, const char *mode, FILE *stream ); 所在文件: stdio.h 参数说明: path: 文件名,用于存储输入输出的自定义文件名。 mode: 文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。 stream: 一个文件,通常使用标准流文件。 返回值:成功,则返回一个path所指定文件的指针;失败,返回NULL。(一般可以不使用它的返回值) 功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。通过调用freopen,就可以修改标准流文件的默认值,实现重定向。

代码语言:javascript
复制
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    freopen("7532.in", "r", stdin);
    freopen("7532.out", "w", stdout);
    //原来的代码保持不变
    double a, b, r;
    int k;
    cin >> a >> b;
    k = int(a/b);
    r = a - b * k;
    printf("%g", r);
    //-------------
    fclose(stdin);
    fclose(stdout);
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考:
  • 总结
  • [CSP-J 2022] 乘方
    • 题目描述
      • 输入格式
        • 输出格式
          • 样例 #1
            • 样例输入 #1
            • 样例输出 #1
          • 样例 #2
            • 样例输入 #2
            • 样例输出 #2
          • 提示
            • 结题思路
            • [CSP-J 2022] 解密
              • 题目描述
                • 输入格式
                  • 输出格式
                    • 样例 #1
                      • 样例输入 #1
                      • 样例输出 #1
                    • 提示
                    • 现场真题注意事项
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档