10164번 - 격자상의 경로
#include <stdio.h>#include <stdlib.h>
int main(){ static long long int i, j, n, m, k, a[25][25], x, y; scanf("%lld %lld %lld",&n, &m, &k); if(k!=0) { x=k/m+1; y=k%m; a[1][1]=1; for(i=1;i<=x;i++) { for(j=1;j<=y;j++) { if(i==1 && j==1) continue; a[i][j]=a[i-1][j]+a[i][j-1]; } } for(i=x;i<=n;i++) { for(j=y;j<=m;j++) { if(i==x && j==y) continue; a[i][j]=a[i-1][j]+a[i][j-1]; } } } else { a[1][1]=1; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(i==1 && j==1) continue; a[i][j]=a[i-1][j]+a[i][j-1]; } } } printf("%lld",a[n][m]); return 0;}
혹시 int 범위를 넘어갈까봐 long long int까지 썼는데 왜 않나오는
y=k%m+1;로 바꿔보세요.
댓글을 작성하려면 로그인해야 합니다.
tim0906s 7년 전
#include <stdio.h>
#include <stdlib.h>
int main()
{
static long long int i, j, n, m, k, a[25][25], x, y;
scanf("%lld %lld %lld",&n, &m, &k);
if(k!=0)
{
x=k/m+1;
y=k%m;
a[1][1]=1;
for(i=1;i<=x;i++)
{
for(j=1;j<=y;j++)
{
if(i==1 && j==1) continue;
a[i][j]=a[i-1][j]+a[i][j-1];
}
}
for(i=x;i<=n;i++)
{
for(j=y;j<=m;j++)
{
if(i==x && j==y) continue;
a[i][j]=a[i-1][j]+a[i][j-1];
}
}
}
else
{
a[1][1]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(i==1 && j==1) continue;
a[i][j]=a[i-1][j]+a[i][j-1];
}
}
}
printf("%lld",a[n][m]);
return 0;
}
혹시 int 범위를 넘어갈까봐 long long int까지 썼는데 왜 않나오는