百度之星初赛签到(1001/1005)
Posted esquecer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百度之星初赛签到(1001/1005)相关的知识,希望对你有一定的参考价值。
Polynomial
度度熊最近学习了多项式和极限的概念。 现在他有两个多项式 f(x)f(x) 和 g(x)g(x),他想知道当 xx 趋近无限大的时候,f(x) / g(x)f(x)/g(x) 收敛于多少。
第一行一个整数 T~(1 \leq T \leq 100)T (1≤T≤100) 表示数据组数。 对于每组数据,第一行一个整数 n~(1 \leq n \leq 1,000)n (1≤n≤1,000),n-1n−1 表示多项式 ff 和 gg 可能的最高项的次数(最高项系数不一定非0)。 接下来一行 nn 个数表示多项式 ff,第 ii 个整数 f_i~(0 \leq f_i \leq 1,000,000)f?i?? (0≤f?i??≤1,000,000) 表示次数为 i-1i−1 次的项的系数。 接下来一行 nn 个数表示多项式 gg,第 ii 个整数 g_i~(0 \leq g_i \leq 1,000,000)g?i?? (0≤g?i??≤1,000,000) 表示次数为 i-1i−1 次的项的系数。 数据保证多项式 ff 和 gg 的系数中至少有一项非0。
对于每组数据,输出一个最简分数 a/ba/b(aa 和 bb 的最大公约数为1)表示答案。 如果不收敛,输出 1/01/0。
3 2 0 2 1 0 2 1 0 0 2 3 2 4 0 1 2 0
1/0
0/1
2/1
样例描述
这些多项式分别为
f(x) = 2x
f(x)=2x
g(x) = 1
g(x)=1
f(x) = 1
f(x)=1
g(x) = 2x
g(x)=2x
f(x) = 4x + 2
f(x)=4x+2
g(x) = 2x + 1
g(x)=2x+1
思路:上下两个数组从后往前比较一下0出现的位置就行了,就是找到第一个非0位置!:) 答案要么是0/1,要么是1/0,要么就是一个上下需要约分一下的比值
代码:
#include<bits/stdc++.h> using namespace std; #define LL long long #define INF 2000000000 #define eps 1e-8 #define pi 3.141592653589793 const LL mod = 1e9+7; struct node int x,y; p[1001]; int main() int _; for(scanf("%d",&_);_--;) int n; scanf("%d",&n); int Min = 10000000,Max = 0; for(int i = 0 ; i < n ; i++) scanf("%d",&p[i].x); for(int i = 0 ; i < n ; i++) scanf("%d",&p[i].y); for(int i = n-1 ; i >= 0 ;i --) if(p[i].x == 0 && p[i].y == 0)continue; if(p[i].x == 0 && p[i].y != 0) puts("0/1");break; else if(p[i].x != 0 && p[i].y == 0) puts("1/0");break; else LL a = __gcd(p[i].x,p[i].y); printf("%lld/%lld\n",p[i].x*1LL/a,p[i].y*1LL/a); break; //判断非零出现的位置,三种情况
E:Seq
Seq
度度熊有一个递推式 a_n = (\sum_i=1^n-1 a_i*i) \% na?n??=(∑?i=1?n−1??a?i??∗i)%n 其中 a_1 = 1a?1??=1。现给出 nn,需要求 a_na?n??。
第一行输入一个整数 TT,代表 T~(1 \leq T \leq 100000T (1≤T≤100000) 组数据。 接下 TT 行,每行一个数字 n~(1\leq n \leq 10^12)n (1≤n≤10?12??)。
输出 TT 行,每行一个整数表示答案。
5 1 2 3 4 5
1 1 0 3 0
思路:打个表发现从n从4开始,6个一循环的。每个循环节里面都有规律可以找。比如除以二,减去一之类的。注意用long long
代码:
#include<bits/stdc++.h> using namespace std; #define LL long long #define INF 2000000000 #define eps 1e-8 #define pi 3.141592653589793 const LL mod = 1e9+7; int main() /* LL a[1112]; int n = 150; a[1] = 1LL; for(int i = 2 ; i <= n ; i ++) LL sum = 0; for(int j = 1 ; j <= i-1 ; j ++) sum += a[j]*j; sum %= i; a[i] = sum; if( sum + 1 == i )printf("---"); printf("%d : %lld \n",i,sum); */ int _; for(scanf("%d",&_);_--;) LL n; scanf("%I64d",&n); if(n == 1|| n == 2) printf("1\n"); else if(n == 3) printf("0\n"); else LL k = n-4; if(k%6 == 0) printf("%I64d\n",n-1); else if(k%6==1) printf("%I64d\n",n/6); else if(k%6==2) printf("%I64d\n",n/2); else if(k%6==3) printf("%I64d\n",n-(k/6+1)*2); else if(k%6==4) printf("%I64d\n",n/2); else if(k%6==5) printf("%I64d\n",k/6+1); /* */
以上是关于百度之星初赛签到(1001/1005)的主要内容,如果未能解决你的问题,请参考以下文章
2021 年百度之星·程序设计大赛 - 初赛二 1001 签到(找规律,快速幂)