第一题
490
别看错17号 一个顶三
第二题
BYQ
36进制
第三题
别用递归
答案 4659 如果不模10000,得到的结果千位是0,题目特意告诉千位不为0
#include<iostream>
using namespace std;
long long dp[100000000];
int main()
{
long long a;
cin>>a;
dp[1]=1;
dp[2]=1;
dp[3]=1;
for(int i=4;i<=a;i++)
{
dp[i]=(dp[i-1]+dp[i-2]+dp[i-3])%10000;
}
cout<<dp[a]<<endl;
return 0;
}
第四题
暴力加优化
答案
//跑个10分钟
#include<bits/stdc++.h>
using namespace std;
#define N 2019
void i2s(int a,string &s)
{
stringstream ss;
ss<<a;
ss>>s;
}
bool is(int a)
{
string s;
i2s(a,s);
if(s.find("2")==string::npos&&s.find("4")==string::npos) return false;
else return true;
}
int main()
{
int ans=0;
for(int i=1;i<N;i++) //还可以从奇偶来优化 考试的时候没跑出来
{
if(is(i)) continue;
for(int j=i+1;j<N;j++)
{
if(is(j)) continue;
for(int k=j+1;k<N;k++)
{
if(is(k)) continue;
if(i+j+k==N)
{
ans++;
}
}
}
}
cout<<ans/6<<endl;//除以6
return 0;
}
第五题
BFS求解,眼睛都看瞎了
大题:
//求只含2 0 1 9数字的类似上面的string.find的即可,和用long long存储
//求等差数列的,我的思路是用最大的数减去最小的数, 然后从大到小枚举公差,此公差从第一项开始的倍数若满足所给的所有数据,那么就是使之最短数列的公差,除一下就知道最短多少个了,过了样例(是不是要考虑公差为0的情况,忘了)
//完全二叉树那题,用数组求解即可 1 2 4 8。。。,开一个数组记录每一层的值,此数组的下标即对应深度,最后将此数组倒着求解最大即可(倒着就可以在相同的情况下,找到深度最小的情况) //(ps:乍一看还想建树层序遍历呢)(有负数数据,max不能设置为0,gg)
//求后缀表达式那题,先排序再将所有的负号个数乘以从第一个开始的数据即可,最后相加 。比如: 排序之后 为 -10 -5 1 2 3 有 3个负号 一个正号,则为 10 5 -1 2 3,相加即为最大,全为负数 如:-10 -9 -8 -7 -5 三个负号,一个正号也是一样的 10 9 8 -7 -5 也为最大(貌似没说用括号吧)
//星际争霸那题没看,字太长了,感觉也不会
有错误欢迎指出