HDU 1695 GCD
这是错误的,暂时还没做出来先放一下
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int gcd(int a,int b)
{
return b==0? a:gcd(b,a%b);
}
int main()
{
int t;
while(~scanf("%d",&t))
{
for(int Case=1; Case<=t; Case++)
{
int a,b,c,d,k;
scanf("%d %d %d %d %d",&a,&b,&c,&d,&k);
if (k == 0)
{
printf("Case %d: 0\n", Case);
continue;
}
b=b/k;
d=d/k;
if(b>d)
swap(b,d);
__int64 ans=0;
for(int i=1; i<=b; i++)
for(int j=i; j<=d; j++)
{
if(gcd(j,i)==1)
{
ans++;
}
}
printf("Case %d: %I64d\n",Case,ans);
}
}
return 0;
}
poj2111
本以为是简单的搜索
竟然是记忆化搜索。。。。给跪了,下面是简单的搜索。。
#include <stdio.h>
#include <string.h>
int mp[370][370];
bool vis[370][370];
int pre[160000];
int jl[160000];
int n;
int mxsp;
int bhx[] = {-2,-1,1,2,2,1,-1,-2};
int bhy[] = {1,2,2,1,-1,-2,-2,-1};
void dfs(int x,int y,int step)
{
pre[step] = mp[x][y];
if(mxsp <= step)
{
if(mxsp == step)
{
if(pre[0] < jl[0])
{
for(int i = 0;i <= step;i++)
jl[i] = pre[i];
}
}
else
{
for(int i = 0;i <= step;i++)
jl[i] = pre[i];
mxsp = step;
}
}
for(int i = 0;i < 8;i++)
{
int hx = x + bhx[i];
int hy = y + bhy[i];
if(hx > 0 && hx <= n && hy > 0 && hy <= n && !vis[hx][hy] && mp[hx][hy] > mp[x][y])
{
vis[hx][hy] = true;
dfs(hx,hy,step + 1);
vis[hx][hy] = false;
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
scanf("%d",&mp[i][j]);
}
}
mxsp = -1;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
memset(pre,-1,sizeof(pre));
memset(vis,false,sizeof(vis));
vis[i][j] = true;
dfs(i,j,0);
}
}
printf("%d\n",mxsp + 1);
for(int i = 0;i <= mxsp;i++)
printf("%d\n",jl[i]);
}
return 0;
}