fork download
  1. #include <cstring>
  2. #include <vector>
  3. #include <list>
  4. #include <map>
  5. #include <set>
  6. #include <deque>
  7. #include <stack>
  8. #include <bitset>
  9. #include <algorithm>
  10. #include <functional>
  11. #include <numeric>
  12. #include <utility>
  13. #include <sstream>
  14. #include <iostream>
  15. #include <iomanip>
  16. #include <cstdio>
  17. #include <cmath>
  18. #include <cstdlib>
  19. #include <ctime>
  20. #include <memory.h>
  21.  
  22. using namespace std;
  23.  
  24. int main() {
  25. int tt;
  26. scanf("%d", &tt);
  27. while (tt--) {
  28. int r, c;
  29. long long g;
  30. scanf("%d %d %lld", &r, &c, &g);
  31. if (c <= 1) {
  32. printf("%d\n", 1);
  33. printf("%lld\n", g);
  34. continue;
  35. }
  36. vector <long long> ret;
  37. long long mx = g;
  38. while (g > 0) {
  39. int low = c, high = 2000000;
  40. while (low < high) {
  41. int mid = (low + high + 1) >> 1;
  42. int by = (c < mid - c) ? c : (mid - c);
  43. long long res = 1;
  44. for (int i = 0; i < by; i++) {
  45. res *= mid - i;
  46. res /= i + 1;
  47. if (res > g) {
  48. break;
  49. }
  50. }
  51. if (res > g || res > mx) high = mid - 1;
  52. else low = mid;
  53. }
  54. int mid = low;
  55. int by = (c < mid - c) ? c : (mid - c);
  56. long long res = 1;
  57. for (int i = 0; i < by; i++) {
  58. res *= mid - i;
  59. res /= i + 1;
  60. }
  61. g -= res;
  62. mx = res;
  63. ret.push_back(res);
  64. c--;
  65. }
  66. int sz = ret.size();
  67. printf("%d\n", sz);
  68. for (int i = 0; i < sz - 1; i++) printf("%lld ", ret[i]);
  69. printf("%lld\n", ret[sz - 1]);
  70. }
  71. return 0;
  72. }
  73.  
Success #stdin #stdout 0s 3436KB
stdin
6
1 1 1000000000000
1 2 1000000000000
1 3 1000000000000
1 4 1000000000000
1 5 1000000000000
1 2 999999911790
stdout
1
1000000000000
2
999999911791 88209
3
999965999340 33994135 6525
4
998439269751 1558986156 1743778 315
5
997016667536 2965281935 17974950 75466 113
2
999998497578 1414212