大数据第三次周赛
类斐波那契循环数
#include<bits/stdc++.h>
using namespace std;
#define int long long
int arr[1000010];
bool key(int k){
int num=0;
string str=to_string(k);
for(int i=0;i<str.length();i++){
arr[num++]=str[i]-'0';
}
int l=0,r=num-1;
int shix=0;
while(shix<k){
shix=0;
for(int i=l;i<=r;i++){
shix+=arr[i];
}
if(shix==k)return false;
arr[num++]=shix;
//判断后不相同,重新求和
l++,r++;
}return true;
}
signed main(){
int k=1e7;
while(key(k--)){
}
cout<<k+1;
return 0;
}
思路就是:找最大嘛,那就从最大往下减->key函数判断这个数是否符合条件->把这个整数的每一个位转化为数组->然后每次求n项和后加到后边,更新这个数列->直至找到为止,若找到就返回false
这里l,r是控制我每次对哪三个数求和
回文串
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
//gmgqlq,qlqgmg
//过滤
int T;cin>>T;
while(T--){
string str="";
string a;cin>>a;
for(int i=0;i<a.length();i++){
if(a[i]!='l'&&a[i]!='q'&&a[i]!='b')str+=a[i];
}
//cout<<str<<" ";
string tmp=str;
reverse(str.begin(),str.end());
if(str!=tmp)cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
return 0;
}
只过了60%