问题 E: 回忆与困惑
时间限制: 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
两个数中间用一个空格分隔。
样例输入 Copy
0 5 0 1 2 3 123456
样例输出 Copy
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
异或
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[1000005],cnt=2;
priority_queue<int, vector<int>, greater<int> >q;
void init()
{
a[1]=1;
a[2]=1;
cnt=2;
for(int i=3;i<=64;i++)
{
a[i]=a[i-1]+a[i-2];
}
}
int main()
{
init();
ll num,t,b,kk=0;
cin>>num>>t;
//for(int i=1;i<=64;i++)
// printf("%lld \n",a[i]);
ll ans=0;
while(t--)
{
cin>>b;
if(b<=0||b>64) kk++;
else ans=ans^a[b];
}
printf("%lld %lld",kk,ans);
return 0;
}
问题 D: string
时间限制: 1 Sec 内存限制: 128 MB
[提交] [状态]
题目描述
Dave最近学习了字符串的字典序,他现在在思考这样一个问题,对于一个由小写字母组成的字符串s,最多可以去掉其中一个字符,如何使得得到的字符串的字典序最小。
字典序,顾名思义就是字典中的顺序,比较的方法是从前往后依次比较,直到第一个不同的字符来确定字典序,如果没有则长度较短的字典序小。
例如对于字符串s1 = "abc", s2="abdc", 先比较第一个字符,相同,继续比较第二个字符,也相同,而第三个字符'c'<'d', 所以字典序s1<s2。
而对于s1 = "abc", s2="abcd", s1<s2
输入
一个字符串s(长度≤100000)
输出
一个字符串t, 为s中最多去掉一个字符后得到的字典序最小字符串
样例输入 Copy
【样例1】 aaaaaaa 【样例2】 abcgfe
样例输出 Copy
【样例1】 aaaaaa 【样例2】 abcfe
提示
样例1解释:
无论去掉哪个字符得到的都是aaaaaa,不去掉任何字符则得到aaaaaaa,其中字典序最小的为aaaaaa
样例2解释
按字典序
数据范围
abcfe<abcge<abcgf<abcgfe<abgfe<acgfe<bcgfe
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[1000005];
priority_queue<int, vector<int>, greater<int> >q;
int main()
{
char str[1000005];
scanf("%s",str);
int len=strlen(str);
int f=0;
for(int i=0;i<len-1;i++)
{
if(str[i+1]<str[i]&&f==0) {f=1;continue;}
printf("%c",str[i]);
}
if(f==1) printf("%c",str[len-1]);
return 0;
}