【2014/05/15】今晚做了一下CTU
2008的这套题,最后的rank是3道题。基本是水题啊,我们做的是4个小时,如果完整做,我想应该还会出掉D题,主要是D题很繁琐,weikd写起都说烦。
【题意】纯模拟题,模拟银行存钱,取钱,转钱的操作。注意下细节~:
1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #include <map>
5 #include <string>
6 #define EPS 1e-8
7 using namespace std;
8
9 char str[1005];
10 char cmd[1005];
11 char name[1005],name1[1005];
12 map<string,double> ac;
13
14 void create(string id)
15 {
16 printf("create: ");
17 if (ac.find(id)!=ac.end())
18 {
19 printf("already exists\n");
20 }
21 else
22 {
23 ac[id] = 0;
24 printf("ok\n");
25 }
26 }
27
28 void deposit(string id, double x)
29 {
30 printf("deposit %.2f: ",x);
31 if (ac.find(id)==ac.end())
32 {
33 printf("no such account\n");
34 }
35 else
36 {
37 ac[id] = ac[id]+x;
38 printf("ok\n");
39 }
40 }
41
42 void withdraw(string id,double x)
43 {
44 printf("withdraw %.2f: ",x);
45 if (ac.find(id)==ac.end())
46 {
47 printf("no such account\n");
48 }
49 else
50 {
51 if (ac[id]+EPS<x)
52 {
53 printf("insufficient funds\n");
54 }
55 else
56 {
57 ac[id]=ac[id]-x;
58 printf("ok\n");
59 }
60 }
61 }
62
63 void transfer(string ida,string idb,double x)
64 {
65 printf("transfer %.2f: ",x);
66 if (ac.find(ida)==ac.end()||ac.find(idb)==ac.end())
67 {
68 printf("no such account\n");
69 }
70 else
71 {
72 if (ida==idb)
73 {
74 printf("same account\n");
75 }
76 else
77 {
78 if (ac[ida]+EPS<x)
79 {
80 printf("insufficient funds\n");
81 }
82 else
83 {
84 ac[ida]=ac[ida]-x;
85 ac[idb]=ac[idb]+x;
86 char ia = *ida.rbegin();
87 char ib = *idb.rbegin();
88 if (ia==ib)
89 {
90 printf("ok\n");
91 }
92 else
93 {
94 printf("interbank\n");
95 }
96 }
97 }
98 }
99 }
100
101 int main()
102 {
103 #ifdef HotWhite
104 freopen("in.txt", "r", stdin);
105 #endif
106 int n;
107 double mn;
108 while(scanf("%d",&n))
109 {
110 if (!n) break;
111 ac.clear();
112 for (int i = 0; i < n; i++)
113 {
114 scanf("%s %lf",str,&mn);
115 ac[str]=mn;
116 }
117 string s1,s2;
118 while(scanf("%s",cmd))
119 {
120 if (strcmp(cmd,"end")==0) break;
121 if (strcmp(cmd,"create")==0)
122 {
123 scanf("%s",name);
124 s1=name;
125 create(s1);
126 }
127 if (strcmp(cmd,"deposit")==0)
128 {
129 scanf("%s%lf",name,&mn);
130 s1=name;
131 deposit(s1,mn);
132 }
133 if (strcmp(cmd,"withdraw")==0)
134 {
135 scanf("%s%lf",name,&mn);
136 s1=name;
137 withdraw(s1,mn);
138 }
139 if (strcmp(cmd,"transfer")==0)
140 {
141 scanf("%s%s%lf",name,name1,&mn);
142 s1=name;
143 s2=name1;
144 transfer(s1,s2,mn);
145 }
146 }
147 printf("end\n\n");
148 }
149 printf("goodbye\n");
150 return 0;
151 }
C
- International Collegiate Programming Contest
【题意】每一组case给你一些买家的姓名和最高出价,还有卖家的姓名和最低售价。然后计算出所有成交信息。
【思路】水题,直接暴力模拟,比较价钱即可。代码如下:
1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 using namespace std;
5 const int MAX = 1010;
6
7 struct BID
8 {
9 char name[25], type[5];
10 double price;
11 };
12 BID bid[MAX], buy[MAX], sell[MAX];
13
14 int main() {
15
16 #ifdef HotWhite
17 freopen("in.txt", "r", stdin);
18 #endif
19
20 int N, flag;
21 char issuer[12];
22
23 while(scanf("%d%s", &N, issuer) != EOF && N)
24 {
25 int cntb = 0, cnts = 0;
26 for(int i=0; i<N; ++i)
27 {
28 scanf("%s%s%lf", bid[i].name, bid[i].type, &bid[i].price);
29 if(strcmp(bid[i].type, "buy") == 0)
30 {
31 buy[cntb++] = bid[i];
32 }
33 if(strcmp(bid[i].type, "sell") == 0)
34 {
35 sell[cnts++] = bid[i];
36 }
37 }
38 printf("%s\n", issuer);
39 for(int i=0; i<N; ++i)
40 {
41 flag = 0;
42 printf("%s:", bid[i].name);
43 if(strcmp(bid[i].type, "buy") == 0)
44 {
45 for(int j=0; j<cnts; ++j)
46 {
47 if(sell[j].price <= bid[i].price)
48 {
49 printf(" %s", sell[j].name);
50 flag = 1;
51 }
52 }
53 }
54 if(strcmp(bid[i].type, "sell") == 0)
55 {
56 for(int j=0; j<cntb; ++j)
57 {
58 if(buy[j].price >= bid[i].price)
59 {
60 printf(" %s", buy[j].name);
61 flag = 1;
62 }
63 }
64 }
65 if(!flag)
66 printf(" NO-ONE");
67 printf("\n");
68 }
69 }
70 return 0;
71 }
【题意】经济危机,政府给予bankA和bankB补助,补助是按照一包一包的算。总共有N包,为了公平起见,怎么分配才能使得最后bankA和bankB得到的补助之差最小。
【思路】贪心策略,从小到大排序,先把最小的给A。然后从最大的开始先给B,再给A,依次分配下去,直到分完。代码如下:
1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4
5 using namespace std;
6
7 int a[50005];
8 int main() {
9 #ifdef HotWhite
10 // freopen("in.txt", "r", stdin);
11 #endif
12 int n;
13 while(scanf("%d",&n))
14 {
15 if (!n) break;
16 for (int i = 0; i < n; i++)
17 {
18 scanf("%d",&a[i]);
19 }
20 sort(a,a+n);
21 printf("%d-A",a[0]);
22 int k=0;
23 for (int i = n-1; i >=1; i--,k++)
24 {
25 printf(" %d-%c",a[i],k&1?‘A‘:‘B‘);
26 }
27 printf("\n");
28 }
29 return 0;
30 }
时间: 2024-07-30 13:44:48