其实今年的赛题算简单的,奈何我编程基础实在太差,端正态度好好补补吧,未来算法的路还太长。
1 组队 这题手算就ok
2 年号字串 找规律手算
3 数列求值 很明显看出来是斐波那契数列变形,也知道精度一定超过long long 但是就是每想到怎么保存那么大的数字,赛后看到别的大神的题解才捶胸顿足:将每次得出的答案mod10000,每次只保存后四位即可(每次mod10000和最后全部加起来mod10000答案是一样的)
#inclue<iostream>
using namespace std;
typedef long long LL;
const int mod=1e4;
LL dp[2019325];
int main(){
dp[1]=dp[2]=dp[3]=1;
for(int i=4;i<=20190324;i++)
{
dp[i]=(dp[i-1]+dp[i-2]+dp[i-3])%mod;
}
cout<<dp[20190324]<<endl;
return 0;
}
4 数的分解 暴力枚举 当时代码写出来了但是运行好几十秒都没出结果,,哭死我。
#include <bits/stdc++.h>
using namespace std;
bool check(int x, int y, int z) { //判断三个正整数中是否含2或4
int res = 0;
while (x) {
res = x % 10;
if (res == 2 || res == 4) return false;
x /= 10;
}
while (y) {
res = y % 10;
if (res == 2 || res == 4) return false;
y /= 10;
}
while (z) {
res = z % 10;
if (res == 2 || res == 4) return false;
z /= 10;
}
return true;
}
int main() {
int ans = 0;
for (int a = 1; a < 2019; a++) {
for (int b = 1; b < 2019; b++) {
if (b == a) continue; //a,b,c三个数不相同
for (int c = 1; c < 2019; c++) {
if (b == c || a == c) continue;
if (a + b + c == 2019 && check(a, b, c)) ans++;
}
}
}
cout << ans / 6 << endl;
return 0;
}
5 迷宫 这题确实不会做 贴一下大神的代码