zoukankan      html  css  js  c++  java
  • #538. 「LibreOJ NOIP Round #1」数列递推

    题目描述

    https://loj.ac/problem/538

    题解

    可以感受到增长速度很快,并且很快会同符号

    所以推个几百项之后即可直接判断,要注意特殊情况0和边界

    code

    #include <bits/stdc++.h>
    #define fo(a,b,c) for (a=b; a<=c; a++)
    #define fd(a,b,c) for (a=b; a>=c; a--)
    #define abs(x) ((x)>0?(x):-(x))
    #define ll long long
    #define N 10000000
    #define file
    using namespace std;
    
    int s[100001],n,Q,i,j,k,l,ans1,ans2;
    ll a[100001],K,Ans1,Ans2;
    
    int main()
    {
    	freopen("seq.in","r",stdin);
    	#ifdef file
    	freopen("seq.out","w",stdout);
    	#endif
    	
    	scanf("%d",&n);
    	fo(i,1,n) scanf("%d",&s[i]);
    	scanf("%d",&Q);
    	for (;Q;--Q)
    	{
    		scanf("%lld%lld%lld",&a[0],&a[1],&K);
    		i=1;
    		while ((a[i-1] || a[i]) && !(abs(a[i-1])>N && abs(a[i])>N && !((a[i-1]<0)^(a[i]<0))))
    		++i,a[i]=a[i-1]*K+a[i-2];
    		
    		Ans1=-9223372036854775807ll,Ans2=9223372036854775807ll;
    		l=1;
    		fo(j,0,i)
    		if (j==s[l])
    		{
    			if (a[j]>Ans1) Ans1=a[j],ans1=j;
    			if (a[j]<Ans2) Ans2=a[j],ans2=j;
    			++l;
    		}
    		
    		if (a[i]>0)
    		{if (s[n]>=i) ans1=s[n];if (Ans2>N) ans2=s[1];}
    		else
    		if (a[i]<0)
    		{if (s[n]>=i) ans2=s[n];if (Ans1<-N) ans1=s[1];}
    		else
    		ans1=ans2=s[1];
    		printf("%d %d
    ",ans1,ans2);
    	}
    	
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    
  • 相关阅读:
    GDUFE ACM-1050
    hdu-2020
    hdu-2055
    hdu-2734
    GDUFE ACM-1145
    GDUFE ACM-1127
    GDUFE ACM-1126
    GDUFE ACM-1125
    GDUFE ACM-1124
    GDUFE ACM-1123
  • 原文地址:https://www.cnblogs.com/gmh77/p/13780216.html
Copyright © 2011-2022 走看看