遥 控 器
acm.zznu.edu.cn/problem.php?id=1617
?
遙 控 器
時間限制:?1 Sec??內存限制:?128 MB提交:?25??解決:?9
[提交][狀態]
題目描述
Dr.Kong?有一臺高級電視機,這臺電視機可以接受100個頻道(從0到99編號)。電視的配套遙控器有13個按鈕:
1???2???3???↑
4???5???6???↓
7???8???9
—??0
當按"↑"鍵時,當前頻道編號會增加1(如果當前為99頻道,則會切換到0頻道)。如果按"↓"鍵,當前頻道編號會減小1(如果當前為0頻道,則會切換到99頻道)。當要切換到0~9頻道時,可以直接在遙控器上按相應的鍵。當要切換到10~99頻道時,可以先按"—"鍵,然后按2個與頻道編號相對應的數字鍵(即先按與頻道編號的十位數字相對應的鍵,然后按與個位數字相對應的鍵)。
由于遙控器長時間的使用和某些未知原因,遙控器上的某些鍵已經壞了,不能再起作用了。現在你的任務是,能否告訴Dr.Kong,如何用最少的按鍵次數來將頻道從編號X切換到編號Y。
輸入
第一行:?N??表示有N組測試數據。??(1<=N<=5)
對每組測試數據有5行,前4行包含遙控器上每個按鍵的信息。0表示對應的鍵壞了,1表示對應的鍵可以使用。第5行包含2個整數,分別是X?和?Y????(0?<=?X?<=?99;?0?<=?Y?<=?99)。
輸出
對每組測試數據輸出一行,即將頻道從編號X切換到編號Y所需要的最小按鍵次數。如果不可能將頻道從編號X?切換到編號Y,則輸出-1.
樣例輸入
2 0 0 1 1 1 1 1 1 1 1 1 1 1 23 52 1 1 1 0 1 1 1 0 1 0 1 0 1 23 52樣例輸出
4 -1提示
來源
第五屆河南省大學生程序設計競賽
?
CODE:
#include<stdio.h>
#define INF 0xfffffff
#define minn(a, b)(a < b ? a : b)
int fly_to(int x, int y);
int walk_to(int x, int y);
int a[10], up, down, flash;
int main()
{
??? int t, i, ans, x, y;
??? scanf("%d", &t);
??? while(t--)
??? {
??????? scanf("%d%d%d%d", &a[1], &a[2], &a[3], &up);
??????? scanf("%d%d%d%d", &a[4], &a[5], &a[6], &down);
??????? scanf("%d%d%d", &a[7], &a[8], &a[9]);
??????? scanf("%d%d", &flash, &a[0]);
??????? scanf("%d%d", &x, &y);
??????? ans = INF;
??????? for(i = 0; i <= 99; i++)
??????? {
??????????? ans = minn(ans, fly_to(x, i) + walk_to(i, y));
??????? }
??????? printf("%d\n", ans == INF ? -1 : ans);
??? }
??? return 0;
}
int fly_to(int x, int y)
{
??? if(x == y)
??????? return 0;
??? if(y / 10 == 0)
??? {
??????? if(a[y])
??????????? return 1;
??????? return INF;
??? }
??? else{
??????? if(flash && a[y/10] && a[y%10])
??????????? return 3;
??????? return INF;
??? }
}
int walk_to(int x, int y)
{
??? int b = INF, c = INF;
??? if(up)
??????? b = (y + 100 - x) % 100;
??? if(down)
??????? c = (x + 100 - y) % 100;
??? return minn(b, c);
}
轉載于:https://www.cnblogs.com/Tinamei/p/4485166.html
總結
- 上一篇: VSTO 得到Office文档的选中内容
- 下一篇: 嵌入式UWB定位测距设备开发实战(7)硬