USACO s1.1.2Greedy Gift Givers(字符串)
题意:计算每一位friend交换钱后,每一位手上拿着的钱是多少。
思路:二维数组,字符串。初始化。读懂题目就好了,对简单的题要快速码完,细心点,
/* TASK:gift1 LANG:C++ ID:huibaochen */ #include <iostream> #include <stdio.h> #include <string.h> const int maxn = 15; const int minn = 20; using namespace std; int main() { freopen ("gift1.in", "r", stdin); freopen ("gift1.out", "w", stdout); int t, m, n, div, mod; char name[maxn][minn], name1[maxn][minn]; int name2[maxn]; while (scanf("%d", &t) != EOF){ memset (name, 0, sizeof(name)); memset (name2, 0, sizeof(name2)); for (int i = 0; i < t; i++){ scanf("%s", name[i]); } for (int i = 0; i < t; i++){ memset (name1, 0, sizeof(name1)); mod = div = 0; scanf ("%s", name1[0]); scanf ("%d%d", &m, &n); if ((m == 0) && (n == 0)) continue; else{ if(n != 0){ div = m / n; mod = m % n; for (int j = 1; j <= n; j++) scanf("%s", name1[j]); for (int j = 1; j <= n; j++){ for (int k = 0; k < t; k++){ if ((strcmp(name1[j], name[k])) == 0) name2[k] = name2[k] + div; } } for (int j = 0; j < t; j++){ if((strcmp(name[j], name1[0])) == 0) name2[j] = name2[j] - m + mod; } } } } for (int i = 0; i < t; i++){ printf("%s %d\n", name[i], name2[i]); } } return 0; }
不要在细节上卡题。
浙公网安备 33010602011771号