百度之星初赛签到(1001/1005)

Posted esquecer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百度之星初赛签到(1001/1005)相关的知识,希望对你有一定的参考价值。

A:Polynomial

Polynomial

 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 32768/32768 K (Java/Others)
Problem Description

度度熊最近学习了多项式和极限的概念。 现在他有两个多项式 f(x)f(x) 和 g(x)g(x),他想知道当 xx 趋近无限大的时候,f(x) / g(x)f(x)/g(x) 收敛于多少。

Input

第一行一个整数 T~(1 \leq T \leq 100)T (1T100) 表示数据组数。 对于每组数据,第一行一个整数 n~(1 \leq n \leq 1,000)n (1n1,000),n-1n1 表示多项式 ff 和 gg 可能的最高项的次数(最高项系数不一定非0)。 接下来一行 nn 个数表示多项式 ff,第 ii 个整数 f_i~(0 \leq f_i \leq 1,000,000)f?i?? (0f?i??1,000,000) 表示次数为 i-1i1 次的项的系数。 接下来一行 nn 个数表示多项式 gg,第 ii 个整数 g_i~(0 \leq g_i \leq 1,000,000)g?i?? (0g?i??1,000,000) 表示次数为 i-1i1 次的项的系数。 数据保证多项式 ff 和 gg 的系数中至少有一项非0。

Output

对于每组数据,输出一个最简分数 a/ba/b(aa 和 bb 的最大公约数为1)表示答案。 如果不收敛,输出 1/01/0。

Sample Input
3
2
0 2
1 0
2
1 0
0 2
3
2 4 0
1 2 0
Sample Output
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

 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 32768/32768 K (Java/Others)
Problem Description

度度熊有一个递推式 a_n = (\sum_i=1^n-1 a_i*i) \% na?n??=(?i=1?n1??a?i??i)%n 其中 a_1 = 1a?1??=1。现给出 nn,需要求 a_na?n??。

Input

第一行输入一个整数 TT,代表 T~(1 \leq T \leq 100000T (1T100000) 组数据。 接下 TT 行,每行一个数字 n~(1\leq n \leq 10^12)n (1n10?12??)。

Output

输出 TT 行,每行一个整数表示答案。

Sample Input
5
1
2
3
4
5
Sample Output
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 签到(找规律,快速幂)

2017"百度之星"程序设计大赛 - 初赛(B)小小粉丝度度熊

hdu 6119 百度之星初赛

百度之星初赛一 补题

2018 “百度之星”程序设计大赛 - 初赛(A)

百度之星2016初赛之部分题解