011 Largest product in a grid(开启传送门)。
题意:给你一个20*20的数字矩阵,让你找到连续四个数的乘积的最大值。
分析:因为数据量较小,直接暴搜就行了。
代码:
#include <bits/stdc++.h>
using namespace std;
int mat[20][20];
int ret(int x,int y){
if(x<0||x>=20) return 0;
if(y<0||y>=20) return 0;
return mat[x][y];
}
int changex[] = {0,0,-1,-1,-1,1,1,1};
int changey[] = {1,-1,-1,0,1,-1,0,1};
int main() {
// freopen("in.txt","r",stdin);
for(int i = 0;i<20;i++) for(int j = 0;j<20;j++) cin>>mat[i][j];
int ans = 0;
for(int i = 0;i<20;i++){
for(int j = 0;j<20;j++){
for(int dir = 0;dir<8;dir++){
int now = 1;
for(int dis = 0;dis<4;dis++){
now*=ret(i+changex[dir]*dis,j+changey[dir]*dis);
}
ans = max(ans,now);
}
}
}
cout<<ans<<endl;
return 0;
}
012 Highly divisible triangular number (开启传送门)。
题意:问你通项为 n∗(n+1)/2 n ∗ ( n + 1 ) / 2 的数列中,哪一个含有超过500个因子。
分析:根据质因数分解定理的应用,可以快速求出一个数的因子数,所以直接暴力就行,题解上有更优解。
答案:76576500
013 Large sum(开启传送门)。
题意:大数求和。
分析:跑Java大数或者c++大数板子就行,python直接可以用,最方便。
答案:5537376230
014 Longest Collatz sequence (开启传送门)。
题意:如果 n n 是奇数,就改成,否则就改成 n/2 n / 2 ,显然任意一个正整数都可以经过有数次变成 1 1 。问你范围内,那个数字需要的处理次数最多。
分析:记忆化搜索就行,速度还挺快。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxm = 1e6+1;
int ans[maxm];
int main() {
// freopen("in.txt","r",stdin);
ans[1] = 1;
int out = 0;
int ind = 0;
for(int i = 2;i<maxm;i++){
long long now = i;
int rans = 0;
while(now!=1){
if(now&1) now = now*3+1;
else now>>=1;
rans++;
if(now<i){
rans+=ans[now];
break;
}
}
ans[i] = rans;
if(rans>out){
out = rans;
ind = i;
}
}
cout<<ind<<endl;
return 0;
}
015 Lattice paths (开启传送门)。
题意:问你从左上到右下只能向右或者向下的路径条数。
分析:显然是个组合数问题,也就是让你求 C2040 C 40 20 。
代码:
#include <bits/stdc++.h>
using namespace std;
long long ans[45][45];
void init(){
for(int i = 1;i<45;i++){
ans[i][0] = 1;
ans[i][i] = 1;
}
for(int i = 1;i<45;i++){
for(int j = 1;j<i;j++){
ans[i][j] = ans[i-1][j]+ans[i-1][j-1];
// cout<<i<<' '<<j<<' '<<ans[i][j]<<endl;
}
}
}
int main() {
// freopen("in.txt","r",stdin);
init();
cout<<ans[40][20]<<endl;
return 0;
}