【HDOJ】1497 Simple Library Management System

链表。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4
 5 #define MAXM 1001
 6 #define MAXN 100001
 7
 8 int un[MAXM], ub[MAXM];
 9 int v[MAXN];
10 int next[MAXN];
11
12 int comp(const void *a, const void *b) {
13     return *(int *)a - *(int *)b;
14 }
15
16 int main() {
17     int m, n, t;
18     int i, j, k;
19     int ui, bi;
20     int bid[11];
21     char cmd[3];
22
23 #ifndef ONLINE_JUDGE
24     freopen("data.in", "r", stdin);
25 #endif
26
27     while (scanf("%d %d", &m, &n) != EOF) {
28         scanf("%d", &t);
29         memset(un, 0, sizeof(un));
30         memset(ub, 0, sizeof(ub));
31         memset(v, 0, sizeof(v));
32         while (t--) {
33             scanf("%s", cmd);
34             if (cmd[0] == ‘B‘) {
35                 // borrow ui bi
36                 scanf("%d %d", &ui, &bi);
37                 if (v[bi]) {
38                     printf("The book is not in the library now\n");
39                 } else if (un[ui] == 9) {
40                     printf("You are not allowed to borrow any more\n");
41                 } else {
42                     v[bi] = ui;
43                     next[bi] = ub[ui];
44                     ub[ui] = bi;
45                     un[ui]++;
46                     printf("Borrow success\n");
47                 }
48             }
49             if (cmd[0] == ‘R‘) {
50                 // return bi
51                 scanf("%d", &bi);
52                 if (v[bi] == 0) {
53                     printf("The book is already in the library\n");
54                 } else {
55                     ui = v[bi];
56                     i = 0;
57                     j = ub[ui];
58                     if (j == bi) {
59                         ub[ui] = next[j];
60                     } else {
61                         while (i<un[ui] && bi!=next[j]) {
62                             j = next[j];
63                             ++i;
64                         }
65                         next[j] = next[bi];
66                     }
67                     un[ui]--;
68                     v[bi] = 0;
69                     printf("Return success\n");
70                 }
71             }
72             if (cmd[0] == ‘Q‘) {
73                 // query ui
74                 scanf("%d", &ui);
75                 if (un[ui]) {
76                     i = 0;
77                     j = ub[ui];
78                     while (i < un[ui]) {
79                         bid[i++] = j;
80                         j = next[j];
81                     }
82                     qsort(bid, un[ui], sizeof(int), comp);
83                     for (i=0; i<un[ui]-1; ++i)
84                         printf("%d ", bid[i]);
85                     printf("%d\n", bid[i]);
86                 } else {
87                     printf("Empty\n");
88                 }
89             }
90         }
91         printf("\n");
92     }
93
94     return 0;
95 }
时间: 2024-11-08 16:43:10

【HDOJ】1497 Simple Library Management System的相关文章

【HDOJ】2451 Simple Addition Expression

递推,但是要注意细节.题目的意思,就是求s(x) = i+(i+1)+(i+2),i<n.该表达中计算过程中CA恒为0(包括中间值)的情况.根据所求可推得.1-10: 31-100: 3*41-1000: 3*4*41-10000: 3*4*4*41-10^n: 3*4^(n-1).并且需要注意,一旦发现某一位大于3,则应立即跳出累加的循环.比如,f(133) = 24,f(143) = 24.同时,单独讨论个位的情况.28行的break处理该种情况. 1 #include <cstdio&g

【HDOJ】1341 Simple Computers

注意PC要与31. 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 #define MAXN 40 6 #define MAXL 10 7 8 char mem[MAXN][MAXL]; 9 char ans[MAXL]; 10 11 int getv(char s[], int i, int j) { 12 int ret = 0; 13 14 while (i < j) { 1

【HDOJ】2424 Gary&#39;s Calculator

大数乘法加法,直接java A了. 1 import java.util.Scanner; 2 import java.math.BigInteger; 3 4 public class Main { 5 public static void main(String[] args) { 6 Scanner cin = new Scanner(System.in); 7 int n; 8 int i, j, k, tmp; 9 int top; 10 boolean flag; 11 int t

【HDOJ】3660 Alice and Bob&#39;s Trip

就是一个基本的dfs.可关键问题是c/c++/g++光输入就超时了.还是写java过的,毕竟时限4s.都放弃希望了,没想到还真过了. 1 import java.lang.*; 2 import java.io.*; 3 import java.util.*; 4 5 6 public class Main { 7 8 public static void main(String[] args) throws java.lang.Exception { 9 InputStream inputSt

【HDOJ】4956 Poor Hanamichi

基本数学题一道,看错位数,当成大数减做了,而且还把方向看反了.所求为最接近l的值. 1 #include <cstdio> 2 3 int f(__int64 x) { 4 int i, sum; 5 6 i = sum = 0; 7 while (x) { 8 if (i & 1) 9 sum -= x%10; 10 else 11 sum += x%10; 12 ++i; 13 x/=10; 14 } 15 return sum; 16 } 17 18 int main() { 1

【HDOJ】1099 Lottery

题意超难懂,实则一道概率论的题目.求P(n).P(n) = n*(1+1/2+1/3+1/4+...+1/n).结果如果可以除尽则表示为整数,否则表示为假分数. 1 #include <cstdio> 2 #include <cstring> 3 4 #define MAXN 25 5 6 __int64 buf[MAXN]; 7 8 __int64 gcd(__int64 a, __int64 b) { 9 if (b == 0) return a; 10 else return

【HDOJ】2844 Coins

完全背包. 1 #include <stdio.h> 2 #include <string.h> 3 4 int a[105], c[105]; 5 int n, m; 6 int dp[100005]; 7 8 int mymax(int a, int b) { 9 return a>b ? a:b; 10 } 11 12 void CompletePack(int c) { 13 int i; 14 15 for (i=c; i<=m; ++i) 16 dp[i]

【HDOJ】3509 Buge&#39;s Fibonacci Number Problem

快速矩阵幂,系数矩阵由多个二项分布组成.第1列是(0,(a+b)^k)第2列是(0,(a+b)^(k-1),0)第3列是(0,(a+b)^(k-2),0,0)以此类推. 1 /* 3509 */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include <stack> 8 #incl

【HDOJ】1818 It&#39;s not a Bug, It&#39;s a Feature!

状态压缩+优先级bfs. 1 /* 1818 */ 2 #include <iostream> 3 #include <queue> 4 #include <cstdio> 5 #include <cstring> 6 #include <cstdlib> 7 #include <algorithm> 8 using namespace std; 9 10 #define MAXM 105 11 12 typedef struct {