hdu 4451水题
挺水的题。我的做法是用ans = N*M*K减去不和谐的数目。首先,对每一个paints shoes对,ans -= N,这是没有问题的。这个操作全执行完以后就能记录每个paints跟多少shoes和谐(用paintspair[i]表示)。然后对于每一个clothes paints对,ans -= paintspair[i],这样就避免了重复计数。
/* * hdu4451/win.cpp * Created on: 2012-10-29 * Author : ben */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <ctime> #include <iostream> #include <algorithm> #include <queue> #include <set> #include <map> #include <stack> #include <string> #include <vector> #include <deque> #include <list> #include <functional> #include <numeric> #include <cctype> using namespace std; const int MAXM = 1005; int N, M, K; int paintspair[MAXM]; int main() { #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); #endif int p, ans, a, b; char str1[100], str2[100]; vector<int> cp; while(scanf("%d%d%d", &N, &M, &K) == 3) { if(N == 0 && M == 0 && K == 0) { break; } ans = N * M * K; cp.clear(); fill(paintspair, paintspair + MAXM, K); scanf("%d", &p); while(p--) { scanf(" %s %d %s %d", str1, &a, str2, &b); if(strcmp(str1, "clothes") == 0) { cp.push_back(b); }else { paintspair[a]--; ans -= N; } } for(int i = 0, len = cp.size(); i < len; i++) { ans -= paintspair[cp[i]]; } printf("%d\n", ans); } return 0; }