UVA 10795 A Different Task(반복 상태 전환)
#include <cstdio>
#include <cstring>
typedef long long ll;
const int N = 65;
int n, start[N], finish[N];
ll f(int p[],int i,int fin) {
if(i == 0)
return 0;
if(p[i] == fin)
return f(p,i-1,fin);
return f(p,i-1,6-p[i]-fin) + (1LL << (i-1));
}
int main() {
int cas = 1;
while(scanf("%d",&n) != EOF && n) {
for(int i = 1; i <= n; i++) {
scanf("%d",&start[i]);
}
for(int i = 1; i <= n; i++) {
scanf("%d",&finish[i]);
}
int k = n;
while(k >= 0 && finish[k] == start[k]) {
k--;
}
ll ans = 0;
if(k >= 1) {
int other = 6 - start[k] - finish[k];
ans = f(start,k-1,other) + f(finish,k-1,other) + 1;
}
printf("Case %d: %lld
",cas++,ans);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UVA - 10986 Sending email(Dijkstra 인접 테이블 + 우선 순위 대기열 최적화)제목 대의: s점에서 t점까지의 최소 거리를 구하는 그림을 주세요. 확인: 적나라한 최단길이지만 n이 너무 크면 인접 행렬을 사용할 수 없기 때문에 Dijkstra에 대한 인접표 + 우선 대기열 최적화가 필요합니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.