我的创新题目

题目概览

名称

项目名称 数列 斐波那契数的长度 区间质数 新挑战
英文名称 list fiblen prime newchal
可执行文件名称 list.exe fiblen.exe prime.exe newchal.exe
输入文件 list.in fiblen.in prime.in newchal.in
输出文件 list.out fiblen.out prime.out newchal.out
每个测试点时限 3s 1s 1s 1s
内存限制 512MiB1 512MiB 16MiB 512MiB
测试点数量 10 10 10 10
每个测试点分值 10 10 10 10

时限仅供参考,请以标程运行时间计算

源文件文件名

语言名称 数列 斐波那契数的长度 区间质数 新挑战
Pascal list.pas fiblen.pas prime.pas newchal.pas
C list.c fiblen.c prime.c newchal.c
C++ list.cpp fiblen.cpp prime.cpp newchal.cpp

编译指令

语言名称 数列 斐波那契数的长度 区间质数 新挑战
Pascal fpc list.pas -O2 fpc fiblen.pas fpc prime.pas fpc newchal.pas -O2
C gcc -o list list.c -lm -static -O2 gcc -o fiblen fiblen.c -lm -static gcc -o prime prime.c -lm -static gcc -o newchal newchal.c -lm -static -O2
C++ g++ -o list list.cpp -lm -static -O2 g++ -o fiblen fiblen.cpp -lm -static g++ -o prime prime.cpp -lm -static g++ -o newchal newchal.cpp -lm -static -O2

注意事项

  1. 所有文件名、目录名区分大小写,请严格按照题目要求。

  2. C/C++main()函数返回值必须为(int)0

  3. 评测将在Windows下进行,使用CCR-Plus评测。GCC版本6.3.0(标准为C++14),FPC版本3.0.2。


1.数列

题目描述

维护$n$个数列,编号$\in[1,n]$,初始时为空。给定$m$个操作或询问,要求回答询问。

输入格式

第一行包含两个整数$n,m$

以下$m$行,每行一个操作或询问,格式为$opt$和若干个操作数

  1. 操作数$i,x$,要求在第$i$个数列末尾插入数$x$

  2. 操作数$i$,要求删除第$i$个数列的末尾

  3. 操作数$i,x$,要求在第$i$个数列首部插入数$x$

  4. 操作数$i$,要求删除第$i$个数列的首部

  5. 操作数$i,j$,要求输出第$i$个数列第$j$个位置的数

  6. 操作数$i$,要求输出第$i$个数列的末尾

强制在线,令上一次答案为$lastans$,初始时为0.设输入的操作数为$x$,则实际的操作数为$x\oplus lastans$。

输出格式

对于每个询问输出一行一个数,表示答案

输入样例

2 7

1 1 3

3 2 5

3 1 1

5 1 1

6 3

4 4

5 4 4

输出样例

1

5

3

样例解释

实际输入样例

2 7

1 1 3

3 2 5

3 1 1

5 1 1

6 2

4 1

5 1 1

过程

编号 数列1 数列2 输出
0      
1 3    
2 3 5  
3 1,3 5  
4 1,3 5 1
5 1,3 5 5
6 3 5  
7 3 5 3

数据范围

测试点 $n$的范围 修改末尾 修改首部 随机访问 查询末尾
1 $n=1$ $\le100$ $\le100$ $\le100$ $\le100$
2 $n=1$ $\le10^6$ $0$ $\le10^6$ $\le10^6$
3 $n=1$ $\le10^6$ $\le10^6$ $\le10^6$ $\le10^6$
4 $n\le10$ $\le100$ $\le100$ $\le100$ $\le100$
5 $n\le200$ $\le10^6$ $0$ $\le10$ $\le10^6$
6 $n\le200$ $\le10^6$ $\le10^6$ $\le10$ $\le10^6$
7 $n\le200$ $\le10^6$ $0$ $\le10^6$ $\le10^6$
8 $n\le500$ $\le10^6$ $\le10^4$ $\le10^6$ $\le10^6$
9 $n\le10^3$ $\le10^6$ $\le10^5$ $\le10^6$ $\le10^6$
10 $n\le10^3$ $\le10^6$ $\le10^6$ $\le10^6$ $\le10^6$

对于100%的数据,$i\in[1,n]$,$\vert x\vert\le10^9$,$j\in[1,cnt_i]$


2.斐波那契数的长度

题目描述

我们都很熟悉斐波那契数列,这里规定

例如$f_{10}=55$,现在请求出$f_n$的精确位数。

输入格式

一个正整数$n$。

输出格式

一个正整数$L$,表示$f_n$的位数。

输入样例

10

输出样例

2

样例解释

$n=10$,$f_n=55$,$L=2$

数据范围

测试点 数据范围 提示
1 $n\le10$ -
2 $n\le90$ 保证$f_n$不超出64位整数2
3 double 保证$n\le1000$不超出双精度浮点数$f_n$
4 $n\le5000$ -
5 $n\le20000$ 保证$f_n$不超出扩展浮点数3
6 $n\le30000$ -
7 $n\le10^5$ -
8 $n\le10^9$ -
9 $n\le10^{18}$ -
10 $n\le10^{18}$ -

3.区间质数

题目描述

求出区间$[l,r]$之间质数的个数。

输入格式

两个自然数$l,r$,用一个空格分隔。

输出格式

一个自然数$cnt$,表示区间$[l,r]$之间质数的个数。

输入样例

1 100

输出样例

25

样例解释

$[1,100]$之间的质数有$2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97$,共有25个。

数据范围

测试点 l,r关系 数据范围
1 $l=r$ $l,r\le100$
2 $l=r$ $l,r\le10^6$
3 $l=r$ $l,r\le10^9$
4 $r-l\le100$ $l,r\le10000$
5 $r-l\le1000$ $l,r\le10^6$
6 - $l,r\le10^6$
7 - $l,r\le2*10^7$
8 - $l,r\le10^9$
9 - $l,r\le10^9$
10 - $l,r\le10^9$

对于100%的数据,$l,r\ge1$。

4.新挑战

题目描述

规定无符号整数$x$的二进制形式中,1出现的次数为$f(x)$,要求快速求出任意64位无符号整数的函数值。

如233=11101001,$f(233)=5$。

输入格式

由于本题部分输入规模较大,我们用一些特殊的方法输入,先定义以下输入函数(伪代码)

定义函数next_integer(64位无符号整数$i,x$)

  • 将64位无符号整数$t$ 赋值为$i$左移($i$模64)

  • 返回 $x$异或$t$

两个无符号整数$n,st$,用一个空格分隔。令$a_0=st,a_i=next_integer(i,a_{i-1})$,其中$i\in1..n$。

输出格式

由于本题部分输出规模较大,我们用一些特殊的方法输出,先定义以下输出函数(伪代码)

定义函数output_arr(无类型指针$a,b$,64位无符号整数$n$)

  • 如果 n模8 不等于0

    • 输出-1
  • 令$a’$等于 指针$a$强制转换为64位无符号整数指针

  • 令$b’$等于 指针$b$强制转换为64位无符号整数指针

  • 令64位无符号整数$ans$等于 $n$

  • 令64位无符号整数$i$ 从1循环到$n$

    • 将$ans$ 赋值为$ans$异或($a’_i$左移$b’_i$)
  • 输出 $ans$

$\forall i\in1..n$,令$b_i=f(a_i)$,调用output_arr(a,b,n)即可。

输入样例

5 233

输出样例

29781

样例解释

$i$ $a_i$ $a_i$的二进制形式 $b_i$ $ans$
0 233 11101001 5 5
1 235 11101011 6 15045
2 227 11100011 5 9893
3 251 11111011 7 23333
4 187 10111011 6 30181
5 27 00011011 4 29781

$a_i$的二进制形式只给出了低8位。

数据范围

测试点 数据范围
1 $n\le10^7$
2 $n\le2*10^7$
3 $n\le3*10^7$
4 $n\le5*10^7$
5 $n\le10^8$
6 $n\le2*10^8$
7 $n\le4*10^8$
8 $n\le5*10^8$
9 $n\le8*10^8$
10 $n\le10^9$
  1. 1MiB=1024KiB,1KiB=1024B;1MB=1000KB,1KB=1000B 

  2. Pascal中的int64或C++中的long long 

  3. Pascal中的extended或C/C++中的long double