ZOJ4108 Fibonacci in the Pocket

Posted misuchii

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZOJ4108 Fibonacci in the Pocket相关的知识,希望对你有一定的参考价值。

技术图片

技术图片

 给出两个数a b 要你求斐波拉契数列中第a项到第b项之和是奇数还是偶数

我们先来观察斐波拉契数列的奇偶性构成为 奇 奇 偶 奇 奇 偶 ...... 奇 奇 偶 这样三个一组的循环

那我们就来判断a b分别为某个循环中的第几个数 就用string来存a和b 然后每一个字符转换成整型-48就是对应的每位数字

用各个数对3求余 就能得到是某个循环中的哪位数了

然后见下图

技术图片(很简单的推一下就出来了)

AC代码:

 1 #include<bits/stdc++.h>
 2 #define pi acos(-1)
 3 typedef long long ll;
 4 typedef unsigned long long ull;
 5 using namespace std;
 6 
 7 namespace io 
 8     const int SIZE = 1e7 + 10;
 9     char inbuff[SIZE];
10     char *l, *r;
11     inline void init() 
12         l = inbuff;
13         r = inbuff + fread(inbuff, 1, SIZE, stdin);
14     
15     inline char gc() 
16         if (l == r) init();
17         return (l != r) ? *(l++) : EOF;
18     
19     void read(int &x) 
20         x = 0; char ch = gc();
21         while(!isdigit(ch)) ch = gc();
22         while(isdigit(ch)) x = x * 10 + ch - 0, ch = gc();
23     
24  using io::read;
25 
26 bool cmp(const int &a, const int &b)
27     return a > b;
28 
29 
30 int main()
31     ios::sync_with_stdio(false);
32     int t;
33     cin>>t;
34     string a, b;
35     while (t--)
36         cin>>a>>b;
37         int sum1 = 0, sum2 = 0;
38         for (int i = 0; i < a.size(); i++)
39             sum1 += int(a[i]) - 48;
40         for (int i = 0; i < b.size(); i++)
41             sum2 += int(b[i]) - 48;
42         int tmp1 = sum1 % 3, tmp2 = sum2 % 3;
43         if ((tmp1 == 0 && tmp2 == 1) || (tmp1 == 1 && tmp2 == 1) ||
44             (tmp1 == 2 && tmp2 == 0) || (tmp1 == 2 && tmp2 == 2))
45             cout<<1<<endl;
46         else cout<<0<<endl;
47     
48     return 0;
49 

 

以上是关于ZOJ4108 Fibonacci in the Pocket的主要内容,如果未能解决你的问题,请参考以下文章

ZOJ4118 Stones in the Bucket

ZOJ 3256Tour in the Castle 矩阵快速幂加速

zoj4110 Strings in the Pocket(manacher)

ZOJ4110 Strings in the Pocket(2019浙江省赛)

zoj 2060 Fibonacci Again(fibonacci数列规律整除3的数学特性)

ZOJ 3774 Fibonacci的K次方和