滑动窗口法
滑动窗口发例题
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include"ss.h"
using namespace std;
int main()
{
long long sum = 1;
long long zero = 0;
long long maxn = 0;
for(long long i = 0; i < strlen(s); i++)
{
if(s[i] != '0')
{
sum *= s[i] - '0';
}
else
{
++zero;
}
if(i > 12)
{
if(s[i - 13] != '0')
{
sum /= s[i - 13] - '0';
}
else
{
-- zero ;
}
}
if(zero == 0 && maxn < sum)
{
maxn = sum;
}
}
printf("%lld\n", maxn);
}
方向数组
方向数组例题
/*************************************************************************
> File Name: 方向数组.cpp
> Author: qwq
> Mail:
> Created Time: 2017年11月07日 星期二 19时07分40秒
************************************************************************/
using namespace std;
long long a[30][30] = {0};
long long maxn = 0;
long long sum = 0;
long dir[4][2] = {0, 1, 1, 1, 1, 0, 1, -1};
int main()
{
for(long i = 5; i < 25; i++)
{
for(long j = 5; j < 25; j++)
scanf("%lld", &a[i][j]);
}
for(long i = 5; i < 25; i++)
{
for(long j = 5; j < 25; j++)
// long sum = 1;
{
for(int k = 0; k < 4; k++)
{
long sum = 1;
for(int dis = 0; dis < 4; dis++)
{
// long sum = 1;
int x = i + dir[k][0] * dis;
int y = j + dir[k][1] * dis;
sum *= a[x][y];
}
if(maxn < sum)
maxn = sum;
}
}
}
printf("%lld\n", maxn);
}
记忆化搜索
记忆化搜索
#include<iostream>
#include<stdio.h>
#include<math.h>
#define maxn_x 1000000
#define maxn_range 5000000
long long keep[maxn_range + 5] = {0};
using namespace std;
int getlength(long long x)
{
if(x == 1)
return 1;
if(x <= maxn_x && keep[x] != 0)
return keep[x];
long long len;
switch(x % 2)
{
case 0:
len = getlength(x / 2) + 1;
break;
case 1:
len = getlength(x * 3 + 1) + 1;
break;
}
if(x <= maxn_x)
keep[x] = len;
return len;
}
int main()
{
long long maxn = 0;
long long num = 0;
for(long long i = 1; i <= maxn_x; i++)
{
if(getlength(i) > maxn)
{
maxn = getlength(i);
num = i;
}
}
printf("%lld\n", num);
}