upc 回忆与困惑

时间限制: 1 Sec 内存限制: 128 MB

题目描述

小学校里的欢声和校园里的花都溶解在静沉沉地夜气里。那种声音实在可见可触,可以供诸瓶儿,一簇又一簇。我听见钟声,像一个比喻,我没有数,但我知道他的急徐、轻重,我听出今天是西南风。

西南风?这个仿佛有点陌生又总是在那边的词语使我沉寂了下来。它使我想到了一个困惑,一个以前的已经解决,却还是有点淡淡的神秘的困惑。

我记得,当时是在西南方行进的远离故乡的火车上,遇到了这个兔子一般神秘的问题

这是一个跳跃的数列。经过长时间的观察,我发现这个数列的前面几项是这样的:1,1,2,3,5,8,13…

我发现,无论何时这个数列出现,他的前两项都是1,后面的数字都会看一眼前面的数字,把他前面的两项的值的和作为自己的值。

我记得,当时我想知道这个数列的第n项是什么。但是我不喜欢太大的数字,所以我困惑的n一定是一个小于等于64的正整数。也就是说,如果n不是正整数,或者n严格大于了64,那么它就不符合我的要求。现在,我仿佛回忆起了自己当时的询问,并希望请你一一回答。因为时间长了,记忆有点模糊,可能会有询问不符合我的要求,这时候你应该告诉我"pcftxdy"。(具体输出方式请按照输出格式中的描述来)

输入

第一行,一个正整数num表示子任务编号(Num=0表示这是样例数据)

第一行,一个整数T。

接下来T行,每行一个数ni表示第i组询问的n。

输出

由于输出可能太多,你只要输出不合法的询问的个数cnt和其他询问的异或和ans即可。

如果询问全都不合法,令ans=0

两个数中间用一个空格分隔。

样例输入
0
5
0
1
2
3
123456
样例输出
2 2
提示

对于第一组询问,n不在czyarl关心的范围内,不合法謻

对于第二组询问,n在czyarl关心的范围内,答案为1;

对于第三组询问,n在czyarl关心的范围内,答案为1;

对于第四组询问,n在czyarl关心的范围内,答案为2;

对于第五组询问,n大于了64,不合法;

最后不合法的询问有2个,cnt=2

ans=1 异或 1 异或 2 = 2

对于所有数据,n在int范围内,T≤106

思路

第一个数就是编号,没什么用(个人感觉)

数列是斐波那契数列,开始可以先打个表(long long + 数组开的大于64) 。 询问的
n 在 1 – 64 内,则更新答案( 异或),否则错误询问数 + 1 。

代码:

#include<iostream>
#include<string>
#include<map>
#include<queue>
#include<vector>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<cmath>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
//const int N=1e5+10;
ll num,t,n,cnt,sum,flag,p[70];
void init()
{
    p[1]=1;
    p[2]=1;
    for(int i=3;i<=64;i++)
    {
        p[i]=p[i-1]+p[i-2];
    }
    return ;
}
int main()
{
    ios::sync_with_stdio(false);
    init();
    cin>>num>>t;
    for(int i=0;i<t;i++)
    {
        cin>>n;
        if(n>=1&&n<=64)
        sum^=p[n];
        else cnt++;
    }
    cout<<cnt<<" "<<sum;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值