[重返NOIP] 模拟——NOIP2009 普及组 多项式输出

题目描述 一元 n 次多项式可用如下的表达式表示: f(x)=a_nx^n+a_{n-1}x^{n-1}+ … +a_1x+a_0,a_n> 0 其中, a_ix^i 称为 i 次项, a_i 称为 i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式: 多项式中自变量为 x ,从左到右按照次数递减顺序给出多项式。 多项式中只包含系数不为 0 的项。 如果多项式 n 次项系数为正,则多项式开头不出 + 号,如果多项式 n 次项系数为负,则多项式以 - 号开头。 对于不是最高次的项,以 + 号或者 - 号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于 0 次的项,其系数的绝对值为 1 ,则无需输出 1 )。如果 x 的指数大于 1 ,则接下来紧跟的指数部分的形式为“ x^b ”,其中 b 为 x 的指数;如果 x 的指数为 1 ,则接下来紧跟的指数部分形式为 x ;如果 x 的指数为 0 ,则仅需输出系数即可。 多项式中,多项式的开头、结尾不含多余的空格。 输入格式 输入共有 2 行 第一行 1 个整数, n ,表示一元多项式的次数。 ...

March 7, 2023 · 2 min · Red

[洛谷] P4924 魔法少女小Scarlet

题目描述 Scarlet 最近学会了一个数组魔法,她会在 n* n 二维数组上将一个奇数阶方阵按照顺时针或者逆时针旋转 90° 。 首先,Scarlet 会把 1 到 n^2 的正整数按照从左往右,从上至下的顺序填入初始的二维数组中,然后她会施放一些简易的魔法。 Scarlet 既不会什么分块特技,也不会什么 Splay 套 Splay,她现在提供给你她的魔法执行顺序,想让你来告诉她魔法按次执行完毕后的二维数组。 输入格式 第一行两个整数 n,m ,表示方阵大小和魔法施放次数。 接下来 m 行,每行 4 个整数 x,y,r,z ,表示在这次魔法中,Scarlet 会把以第 x 行第 y 列为中心的 2r+1 阶矩阵按照某种时针方向旋转,其中 z=0 表示顺时针, z=1 表示逆时针。 输出格式 输出 n 行,每行 n 个用空格隔开的数,表示最终所得的矩阵 样例 #1 样例输入 #1 5 4 2 2 1 0 3 3 1 1 4 4 1 0 3 3 2 1 样例输出 #1 5 10 3 18 15 4 19 8 17 20 1 14 23 24 25 6 9 2 7 22 11 12 13 16 21 提示 对于50%的数据,满足 r=1 ...

March 6, 2023 · 2 min · Red

[重返NOIP] 高精度——NOIP1998 普及组 阶乘之和

题目描述 用高精度计算出 S = 1! + 2! + 3! + … + n! ( n <= 50 )。 其中 ! 表示阶乘,定义为 n!=n (n-1) (n-2) … 1 。例如, 5! = 5 4 3 2 1=120 。 输入格式 一个正整数 n 。 输出格式 一个正整数 S ,表示计算结果。 样例 #1 样例输入 #1 3 样例输出 #1 9 提示 【数据范围】 对于 100 % 的数据, 1 <= n <= 50 。 思路 看了一下大部分题解,其实也没有别的考察点,主要就是高精加套高精乘,方法也有很多,下面主要介绍两种该思路的实现方法 方法一 这种方法主要使用结构体去封装大整数,让大整数能像普通整型一样直接相加相乘,下面是封装的结构体 #define MAXN 50000 struct bigint{ int len,a[MAXN];//len记录位数,a记录每个数位 bigint(int x=0){//通过初始化使得这个大整数能够表示整型x,默认为0 memset(a,0,sizeof(a)); for(len=1;x;len++){ a[len]=x%10,x/=10; } len--; } int &operator[](int i){ return a[i]; //重载[],可以直接用x[i]代表x.a[i] } void flatten(int L){//一口气处理1到L范围内的进位并重置长度。需要保证L不小于有效长度 //简单说就是将数组每个位置经过进位后都变成一位数 len=L; for(int i=1;i<=len;i++){ a[i+1]+=a[i]/10; a[i]%=10; } for(;!a[len];){//重置长度为有效长度 len--; } } void print(){ for(int i=max(len,1);i>=1;i--){ printf("%d",a[i]); } } bigint operator+(bigint a,bigint b){//表示两个bigint类相加,返回一个bigint类 bigint c; int len=max(a.len,b.len); for(int i=1;i<=len;i++){ c[i]+=a[i]+b[i]; } c.flatten(len+1);//答案不可能超过len+1位,所以用len+1做进位处理 return c; } bigint operator*(bigint a,bigint b){ bigint c; int len=a.len; for(int i=1;i<=len;i++){ c[i]=a[i]*b; } c.flatten(len+1);//int类型最长10位,所以可以这样做一遍进位处理 } }; 封装完后,就需要主函数对接接口直接使用了 ...

March 6, 2023 · 1 min · Red

Echo战队第14次培训——密码学基础

课件下载

March 3, 2023 · 1 min · Red

[重返NOIP] 数学1——NOIP2013 提高组 转圈游戏

水一道纯数学推导的题,虽然网上有较多使用快速幂的方法,但个人更喜欢像下面这种数学推导的方式,所以记录一下 题目描述 n 个小伙伴(编号从 0 到 n-1 )围坐一圈玩游戏。按照顺时针方向给 n 个位置编号,从 0 到 n-1 。最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推。游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,……,依此类推,第 n - m 号位置上的小伙伴走到第 0 号位置,第 n - m+1 号位置上的小伙伴走到第 1 号位置,……,第 n-1 号位置上的小伙伴顺时针走到第 m-1 号位置。 现在,一共进行了 {10}^k 轮,请问 x 号小伙伴最后走到了第几号位置。 输入格式 共一行,包含四个整数 n, m, k, x ,每两个整数之间用一个空格隔开。 输出格式 一个整数,表示 {10}^k 轮后 x 号小伙伴所在的位置编号。 样例 #1 样例输入 #1 10 3 4 5 样例输出 #1 5 提示 对于 30\% 的数据, 0 < k < 7 ; ...

February 21, 2023 · 1 min · Red