TopCoder SRM 634 Div2 Problem 500 - ShoppingSurvey

题意

有N个人,现在知道每个商品被买了ki次,求最少的,买了全部商品的人数。

思路

要尽量不让一个人买完商品,也就是尽量把商品卖给不同的人。

我用num[i],表示第i个人买的商品数,然后买就行。

比如说5个人,商品为3,3,4。

第一个商品卖给1,2,3

第二个卖给4,5,1

第三个卖给2,3,4,5。

这样就没人买到全部的商品了。

代码

  
  
  
  
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <ctime>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <set>
  8. #include <vector>
  9. #include <sstream>
  10. #include <typeinfo>
  11. #include <fstream>
  12. using namespace std;
  13. class ShoppingSurveyDiv2 {
  14. int num[110];
  15. public:
  16. int minValue(int N, vector<int> s) {
  17. int cnt = 0;
  18. int len = s.size(), j = 1;
  19. for (int i = 0; i < len; i++)
  20. {
  21. while (s[i]--)
  22. {
  23. num[j]++;
  24. j++;
  25. if (j > N) j = 1;
  26. }
  27. }
  28. for (int i = 1; i <= N; i++)
  29. if (num[i] >= len) cnt++;
  30. return cnt;
  31. }
  32. };

你可能感兴趣的:(ACM,topcoder)