| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
谁能看看我程序哪里错了...In Reply To:有什么trick么。。 Posted by:forgotten at 2006-03-30 11:51:53 #include <stdio.h>
#include <string.h>
const int MaxM = 10; // max number of desks
const int MaxC = 30; // max number of books allowed to put on a desk
const int MaxN = 100; // max number of students
const int MaxR = 50; // max number of books requested by one student
const int MaxID = 100; // max ID number of the books
bool had[MaxM][MaxID];
int desk[MaxM][MaxC + 1], desk_op[MaxM], desk_ed[MaxM];
int wait[MaxN * MaxR], wait_size;
int inform[MaxN][MaxR], size[MaxN];
int m, c;
int GetBook(int book) {
int cost = 0, placed, took, i;
for (i = 0; i < m; i ++) {
if (had[i][book]) {
cost += i + 1;
desk_op[i] = (desk_op[i] + 1) % c;
had[i][book] = false;
break;
}
}
if (i == m) {
cost += m + 1;
}
for (i = 0; i < m; i ++) {
if (desk_op[i] == desk_ed[i]) continue;
cost += i + 1;
desk[i][desk_ed[i]] = book;
desk_ed[i] = (desk_ed[i] + 1) % c;
had[i][book] = true;
placed = i;
break;
}
if (i == m) {
cost += m + 1;
placed = i;
}
if (i != 0) {
cost ++;
desk_op[0] = (desk_op[0] + 1) % c;
took = desk[0][desk_op[0]];
had[0][took] = false;
for (i = 1; i < m; i ++) {
if (desk_op[i] == desk_ed[i]) continue;
cost += i + 1;
desk[i][desk_ed[i]] = took;
desk_ed[i] = (desk_ed[i] + 1) % c;
had[i][took] = true;
break;
}
if (i == m) {
cost += m + 1;
}
cost += placed + 1 + 1;
if (placed != m) {
desk_ed[placed] = (desk_ed[placed] + c - 1) % c;
had[placed][book] = false;
}
desk[0][desk_ed[0]] = book;
desk_ed[0] = (desk_ed[0] + 1) % c;
had[0][book] = true;
}
return cost;
}
int main() {
int n, pBook, res;
bool flag;
while (scanf("%d%d%d", &m, &c, &n) == 3 && (m || c || n)) {
if (c == 0) m = 0;
c ++;
wait_size = 0;
memset(desk, 0, sizeof(desk));
memset(had, false, sizeof(had));
memset(desk_op, 0, sizeof(desk_op));
for (int i = 0; i < m; i ++) {
desk_ed[i] = 1;
}
for (int i = 0; i < n; i ++) {
scanf("%d", &size[i]);
for (int j = 0; j < size[i]; j ++) {
scanf("%d", &inform[i][j]);
}
}
pBook = 0;
do {
flag = true;
for (int i = 0; i < n; i ++) {
if (size[i] <= pBook) continue;
wait[wait_size++] = inform[i][pBook] - 1;
flag = false;
}
pBook ++;
} while (!flag);
res = 0;
for (int i = 0; i < wait_size; i ++) {
res += GetBook(wait[i]);
}
printf("%d\n", res);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator