fork download
  1. """
  2.  都道府県別人口
  3. """
  4. #2019/10データ 総人口=126216142
  5. pp19 = [5248552, 1246138, 1226430, 2303160, 965968, 1077057, 1847950, 2868041, 1942312, 1937626, 7337330, 6279026, 13942856, 9200166, 2222004, 1042998, 1137181, 767742, 812056, 2049023, 1988931, 3639226, 7552873, 1779770, 1413959, 2583140, 8823453, 5463609, 1331330, 923721, 555663, 673891, 1891346, 2807987, 1355495, 728633, 956069, 1338811, 697674, 5110113, 814211, 1325205, 1746740, 1134431, 1072077, 1599984, 1454184]
  6.  
  7. #2017/10データ 総人口=126756594
  8. pp17 = [5320523, 1278450, 1254807, 2322024, 995380, 1101452, 1882666, 2896675, 1961963, 1958409, 7307579, 6255876, 13742906, 9161139, 2266121, 1055893, 1147447, 778329, 823580, 2076017, 2010698, 3673401, 7526911, 1798886, 1412956, 2599313, 8831642, 5502987, 1348257, 944320, 565233, 684668, 1908447, 2830069, 1381584, 743356, 967640, 1363907, 713465, 5110338, 823620, 1353550, 1765518, 1151853, 1088136, 1624801, 1443802]
  9.  
  10. #2015/10データ 総人口=127094745
  11. pp15 = [5381733, 1308265, 1279594, 2333899, 1023119, 1123891, 1914039, 2916976, 1974255, 1973115, 7266534, 6222666, 13515271, 9126214, 2304264, 1066328, 1154008, 786740, 834930, 2098804, 2031903, 3700305, 7483128, 1815865, 1412916, 2610353, 8839469, 5534800, 1364316, 963579, 573441, 694352, 1921525, 2843990, 1404729, 755733, 976263, 1385262, 728276, 5101556, 832832, 1377187, 1786170, 1166338, 1104069, 1648177, 1433566]
  12.  
  13.  
  14.  
  15. ##以下に想定解追加(20/11/10)
  16.  
  17.  
  18.  
  19. import numpy as np
  20.  
  21. def calall1(ipop):
  22. jnk = np.array(ipop, dtype=np.int32)
  23. sm = np.sum(jnk)
  24. c9, c8, c7 = 111111111, 11111111, 1111111
  25. mx = max(sm - c9, c8) + 5
  26. pct = np.zeros(mx, dtype=np.uint16)
  27. pct[0] = 1
  28. for kn in jnk:
  29. pct[kn :] += pct[: -kn].copy()
  30.  
  31. # 上のnumpy更新をc++風の配列更新にしたら、
  32. # for(int kn: jnk){ for(int j=mx-kn-1; j>=0; j--) pct[j+kn] += pct[j]; }
  33.  
  34. oku = pct[sm - c9] if sm >= c9 else 0
  35. return (pct[c7], pct[c8], oku)
  36.  
  37. idt = ((2019, pp19), (2017, pp17), (2015, pp15))
  38. for yr, vd in idt:
  39. rc = calall1(vd)
  40. print(f"{yr}年 --> {sum(rc)}{rc}\n")
  41.  
  42. ##()は内訳、c7, c8, c9の値
  43.  
Success #stdin #stdout 1.89s 111536KB
stdin
Standard input is empty
stdout
2019年 -->  693(0, 43, 650)

2017年 -->  859(0, 39, 820)

2015年 -->  916(0, 40, 876)