题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1571
题目的意思很是简单,就是模拟一个面的的情况。直接链表模拟就可以了。。。
表示最近写了一些模拟,才发现自己的代码能力的羸弱。。。。
写了一些个链表的模拟,一直各种Bug,RE,WA。。反正是各种错误的有。。。
反正,还是多写吧。。自己的代码能力还是很弱。。。。
这只能用多写才能够解决的问题。。。
Code:
#include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <algorithm> #include <queue> using namespace std; const int N = 33; struct Node { int num; Node *next; Node(){ next = NULL; } Node(int x) { num = x; next = NULL; } } *root, *tail; int size() { Node *p = root; int ans = 0; while(p -> next != tail){ p = p -> next; ans ++; } return ans; } int Delete(int x) { int ans = x; root = root ->next; root -> num = -1; Node *p = root; while(p -> next != NULL){ if(p -> next -> num == ans){ p ->next = p ->next ->next; } p = p -> next; } return ans; } int main() { // freopen("1.txt", "r", stdin); int n; while(scanf("%d", &n) && n){ int map[N][N]; for(int i = 0; i < n; i ++){ for(int j = 0; j < n; j ++) scanf("%d", &map[i][j]); } int m, now = 0, x, ans = 0; char order[5]; root = new Node(-1);// define the root and tail.. and tail is the next node of root. tail = new Node(-1); root -> next = tail; scanf("%d", &m); while(m --){ scanf("%s", order); if(order[0] == 'U'){ scanf("%d", &x); if(size() == 7 || now == x){ continue; } else { tail -> num = x; tail -> next = new Node(-1); tail = tail -> next; } } else { if(root -> next== tail) continue; int to = Delete(root -> next -> num); ans += map[now][to]; now = to; } } printf("%d\n", ans); delete root; delete tail; } return 0; }