<small id="yahdu"></small>

    1. <mark id="yahdu"></mark>

      POJ - 1840 - Eqs = 思维

      http://poj.org/problem?id=1840

      题意:求 \(a_1x_1^3+a_2x_2^3+a_3x_3^3+a_4x_4^3+a_5x_5^3=0\) 的整数解,其中所有变量的取值都是 \([-50,50]\) ,且 \(x_i \neq 0\)

      暴力枚举,但是要怎么分两半呢?事实证明是前半部分分2个,后半部分分3个会更好,为什么呢?

      大概是多了一个 \(\log_{2}{100}\)吧,也是差不多7倍常数了。

      前半部分分两个是:
      \(O(n^2\log(n^2)+n^3\log(n^2))\)

      前半部分分三个就白白多了7倍常数,实属逗比。

      可惜POJ用不了unordered_map,待会手写一发hash看看?

      #include<algorithm>
      #include<cmath>
      #include<cstdio>
      #include<cstring>
      #include<iostream>
      #include<map>
      #include<set>
      #include<stack>
      #include<string>
      #include<queue>
      #include<vector>
      using namespace std;
      typedef long long ll;
      
      map<int, int> M;
      
      int main() {
      #ifdef Yinku
          freopen("Yinku.in", "r", stdin);
      #endif // Yinku
          int a1, a2, a3, a4, a5;
          scanf("%d%d%d%d%d", &a1, &a2, &a3, &a4, &a5);
          for(int x1 = -50; x1 <= 50; ++x1) {
              if(x1 == 0)
                  continue;
              int p1 = a1 * x1 * x1 * x1;
              for(int x2 = -50; x2 <= 50; ++x2) {
                  if(x2 == 0)
                      continue;
                  int p2 = a2 * x2 * x2 * x2;
                  M[p1 + p2]++;
              }
          }
          ll ans = 0;
          for(int x3 = -50; x3 <= 50; ++x3) {
              if(x3 == 0)
                  continue;
              int p3 = a3 * x3 * x3 * x3;
              for(int x4 = -50; x4 <= 50; ++x4) {
                  if(x4 == 0)
                      continue;
                  int p4 = a4 * x4 * x4 * x4;
                  for(int x5 = -50; x5 <= 50; ++x5) {
                      if(x5 == 0)
                          continue;
                      int p5 = a5 * x5 * x5 * x5;
                      map<int, int>::iterator it = M.find(-p3 - p4 - p5);
                      if(it != M.end())
                          ans += it->second;
                  }
              }
          }
          printf("%lld\n", ans);
      }

      一个假的哈希,大概就是把它按余数分裂成几棵平衡树来减小树的规模,大概取值合理的话可以快3倍左右(原本平衡树应该是 \(\log_2{10^6}=20\) 的,套个余数哈希(余数为 \(5\times10^4\) )就快了三倍,大概符合 \(\log_2{10^2}=7\) ),注意初始化map是需要时间的,所以并不是余数取越大越好,而且的确会创建map的实例,占用内存空间。

      #include<algorithm>
      #include<cmath>
      #include<cstdio>
      #include<cstring>
      #include<iostream>
      #include<map>
      #include<set>
      #include<stack>
      #include<string>
      #include<queue>
      #include<vector>
      using namespace std;
      typedef long long ll;
      
      const int MAXN = 49999;
      struct HashTable {
          map<int, int> M[MAXN];
          void insert(int x) {
              int p = x % MAXN;
              if(p < 0)
                  p += MAXN;
              M[p][x]++;
          }
          int count(int x) {
              int p = x % MAXN;
              if(p < 0)
                  p += MAXN;
              map<int, int>::iterator it = M[p].find(x);
              if(it != M[p].end())
                  return it->second;
              return 0;
          }
      } ht;
      
      //寻找n以内的一个最大的质数
      /*const int MAXP=2e6;
      bool np[MAXP+1];
      void find_p(int n){
          np[1]=1;
          for(int i=1;i<=n;++i){
              if(np[i])
                  continue;
              for(int j=i+i;j<=n;j+=i)
                  np[j]=1;
          }
          for(int i=n;;--i){
              if(!np[i]){
                  printf("MAXP=%d\n",i);
                  break;
              }
          }
      }*/
      
      int main() {
      #ifdef Yinku
          freopen("Yinku.in", "r", stdin);
      #endif // Yinku
          //find_p(5e4);
          int a1, a2, a3, a4, a5;
          scanf("%d%d%d%d%d", &a1, &a2, &a3, &a4, &a5);
          for(int x1 = -50; x1 <= 50; ++x1) {
              if(x1 == 0)
                  continue;
              int p1 = a1 * x1 * x1 * x1;
              for(int x2 = -50; x2 <= 50; ++x2) {
                  if(x2 == 0)
                      continue;
                  int p2 = a2 * x2 * x2 * x2;
                  ht.insert(p1 + p2);
              }
          }
          ll ans = 0;
          for(int x3 = -50; x3 <= 50; ++x3) {
              if(x3 == 0)
                  continue;
              int p3 = a3 * x3 * x3 * x3;
              for(int x4 = -50; x4 <= 50; ++x4) {
                  if(x4 == 0)
                      continue;
                  int p4 = a4 * x4 * x4 * x4;
                  for(int x5 = -50; x5 <= 50; ++x5) {
                      if(x5 == 0)
                          continue;
                      int p5 = a5 * x5 * x5 * x5;
                      ans += ht.count(-p3 - p4 - p5);
                  }
              }
          }
          printf("%lld\n", ans);
      }

      但是假如哈希套哈希再套平衡树说不定会快到飞起?

      相关文章
      相关标签/搜索
      4887铁算盘四肖中特香港马会开码结果直播 开奖结果-香港最快开奖现场直播-王中王资料 一肖中特-2018年管家婆彩图 今天-王中王中特网资料大全 白小姐 常宁市| 禄劝| 固始县| 仲巴县| 兴山县| 宣汉县| 吉首市| 汕头市| 永城市| 石河子市| 平原县| 西吉县| 积石山| 福海县| 扬州市| 谢通门县| 遂宁市| 鄂伦春自治旗| 泸西县| 建阳市| 安徽省| 区。| 安福县| 涟源市| 重庆市| 余庆县| 清新县| 远安县| 三门峡市| 若羌县| 陇川县| 万载县| 盐城市| 濉溪县| 阳原县| 江门市| 两当县| 通山县| 大港区| 壤塘县| 兴海县| 汉川市| 南丰县| 万宁市| 勐海县| 岳池县| 桂东县| 平阴县| 张北县| 潮安县| 灵寿县| 雷波县| 九江县| 雅安市| 崇文区| 沐川县| 荆门市| 应城市| 修水县| 高密市| 赣州市| 萨嘎县| 砀山县| 凤城市| 昌宁县| 琼结县| 灵武市| 阿拉善盟| 鄂伦春自治旗| 万年县| 深圳市| 都昌县| 安徽省| 阿巴嘎旗| 沾化县| 宁化县| 宁晋县| 南部县| 桐庐县| 兴安县| 锡林郭勒盟| 玛多县| 岢岚县| 平江县| 阿克苏市| 贡嘎县| 台南市| 金秀| 曲沃县| 长阳| 望奎县| 临泉县| 庄河市| 天峨县| 祁东县| 乌兰察布市| 平山县| 永善县| 交口县| 淮北市| 丰顺县| 仁怀市| 张北县| 闵行区| 额济纳旗| 曲阜市| 资中县| 大厂| 大港区| 都匀市| 林甸县| 神农架林区| 泰宁县| 定安县| 庆安县| 通许县| 松滋市| 都匀市| 西林县| 高要市| 黑山县| 寻甸| 宁海县| 山阴县| 嵩明县| 灌云县| 当阳市| 津市市| 化德县| 长丰县| 青神县| 乐至县| 察隅县| 称多县| 中西区| 普安县| 莱芜市| 长春市| 日喀则市| 迁安市| 高安市| 定州市| 含山县| 华宁县| 积石山| 景宁| 邵东县| 普安县| 犍为县| 德庆县| 抚州市| 亳州市| 澳门| 武陟县| 延寿县| 榆中县| 东明县| 奈曼旗| 延川县| 望奎县| 浙江省| 纳雍县| 和硕县| 石河子市| 丹巴县| 五华县| 武宣县| 蕲春县| 班玛县| 嵩明县| 周宁县| 富蕴县| 瓦房店市| 卢龙县| 海南省| 高唐县| 安化县| 十堰市| 伊川县| 汨罗市| 方城县| 云浮市| 安福县| 浑源县| 防城港市| 古交市| 延安市| 文昌市| 磴口县| 兴山县| 大名县| 永泰县| 都江堰市| 盐亭县| 远安县| 敦化市| 阜南县| 大安市| 淄博市| 长治县| 崇左市| 石柱| 陵川县| 沙洋县| 思茅市| 大同县| 浮梁县| 湖南省| 绵竹市| 噶尔县| 淳化县| 江达县| 四会市| 定南县| 壶关县| 达州市| 芮城县| 敦煌市| 郴州市| 襄汾县| 灌云县| 莱芜市| 平利县| 福海县| 搜索| 宁远县| 宁都县| 林口县| 榆树市| 洛南县| 济南市| 喀什市| 永丰县| 疏附县| 都匀市| 朝阳县| 延津县| 洛川县| 阿坝| 荆门市| 余庆县| 麻城市| 南安市| 霍山县| 辽阳市| 阿拉尔市| 锦屏县| 含山县| 罗城| 五家渠市| 霍林郭勒市| 离岛区| 南平市| 长沙市| 德保县| 革吉县| 布尔津县| 牟定县| 油尖旺区| 江门市| 阳新县| 胶州市| 鄂伦春自治旗| 紫云| 讷河市| 天祝| 沁源县| 潮州市| 新平| 礼泉县| 文安县| 罗田县| 乌苏市| 遵义县| 龙里县| 绥阳县| 吉安市| 安泽县| 清镇市| 奉贤区| 西乌| 大港区| 蓝山县| 石景山区| 玉环县| 江北区| 延川县| 德令哈市| 旬阳县| 神木县| 建水县| 澄迈县| 重庆市| 二手房| 丰原市| 张家界市| 迭部县| 虹口区| 平南县| 河间市| 昭平县| 大同市| 常德市| 客服| 大关县| 游戏| 唐河县| 新乡市| 儋州市| 常德市| 高青县| 六安市| 喀喇沁旗| 社会| 盐城市| 昌宁县| 洪洞县| 临海市| 开远市| 甘谷县| 通河县| 新蔡县| 淅川县| 扬中市| 保德县| 乌什县| 札达县| 来宾市| 扬州市| 石景山区| 广昌县| 文山县| 日照市| 松江区| 桂平市| 昭通市| 清河县| 杭州市| 桐乡市| 庐江县| 尤溪县| 建阳市| 金溪县| 邹平县| 郎溪县| 桦川县| 申扎县| 樟树市| 彰化市| 南平市| 容城县| 沭阳县| 沙坪坝区| 双柏县| 阜新| 商河县| 华容县| 台前县| 兰考县| 济阳县| 龙南县| 宝应县| 台中市| 顺昌县| 旬邑县| 永城市| 长子县| 蓬安县| 滦南县| 盐城市| 平湖市| 乐陵市| 来凤县| 恩平市| 祥云县| 雅江县| 余干县| 北宁市| 太保市| 姜堰市| 布拖县| 吴桥县| 新密市| 和田市| 南丰县| 贵德县| 唐海县| 东丰县| 镇平县| 德阳市| 波密县| 剑阁县| 金乡县| 荔浦县| 绥江县| 汨罗市| 济宁市| 阿拉善左旗| 井陉县| 阳谷县| 叶城县| 长泰县| 三亚市| 高台县| 汾阳市| 镇江市| 辽宁省| 叶城县| 堆龙德庆县| 板桥市| 大厂| 海伦市| 隆尧县| 吉首市| 探索| 墨江| 庆阳市| 甘孜县| 乐陵市| 鄂托克旗| 平南县| 石渠县| 榆社县| 黄浦区| 诸城市| 永昌县| 溧水县| 夏邑县| 威宁| 肃宁县| 衡水市| 敦化市| 桂林市| 冷水江市| 三门峡市| 铜山县| 鄂尔多斯市| 海宁市| 扶余县| 隆尧县| 若尔盖县| 松阳县| 洪江市| 南开区| 梁平县| 繁峙县| 舟山市| 怀化市| 太白县| 扶风县| 六枝特区| 扎囊县| 博野县| 乌拉特中旗| 宿州市| 神池县| 浮山县| 巴青县| 连平县| 青田县| 斗六市| 东乡族自治县| 鹤峰县| 迁西县| 双峰县| 塔城市| 依兰县| 芜湖市| 兴安县| 名山县| 铜川市| 同德县| 新和县| 库尔勒市| 武定县| 广东省| 阿城市| 岳普湖县| 宜黄县| 三都| 泰顺县| 蓬安县| 大洼县| 上栗县| 武鸣县| 孝义市| 潍坊市| 吉首市| 金川县| 望谟县| 揭东县| 宁化县| 额尔古纳市| 奉贤区| 甘南县| 顺平县| 察隅县| 巴东县| 闸北区| 临沧市| 额济纳旗| 沙坪坝区| 诸暨市| 星子县| 社旗县| 东莞市| 宝兴县| 宜章县| 孝昌县| 钦州市| 安岳县| 陆川县| 濮阳市| 达拉特旗| 湖州市| 东乌珠穆沁旗| 井冈山市| 怀安县| 苗栗县| 霍山县| 冷水江市| 化隆| 漠河县| 灌阳县| 八宿县| 贺兰县| 无锡市| 东港市| 军事| 通许县| 固镇县| 晋州市| 克拉玛依市| 固安县| 丰原市| 普宁市| 永年县| 鄂州市| 花莲县| 罗源县| 广州市| 盐源县| 互助| 崇信县| 二手房| 深泽县| 伊宁市| 琼中| 张掖市| 连平县| 嘉善县| 疏勒县| 富源县| 四平市| 靖远县| 汝南县| 西盟| 烟台市| 桂林市| 建水县| 莫力| 子洲县| 元阳县| 浪卡子县| 贺兰县| 新津县| 通江县| 监利县| 广德县| 浑源县| 措美县| 浦东新区| 惠水县| 五大连池市| 新宾| 达尔| 杭锦旗| 丹江口市| 平定县| 桑植县| 息烽县| 旬邑县| 革吉县| 榆林市| 乌什县| 山丹县| 荔波县| 叙永县| 宜宾县| 金溪县| 江城| 北安市| 张家口市| 军事| 塔河县| 平江县| 西畴县| 中卫市| 综艺| 双鸭山市| 兴国县| 呼伦贝尔市| 凤凰县| 雅安市| 南江县| 滨州市| 慈溪市| 和平区| 安仁县| 缙云县| 马公市| 德化县| 札达县| 阳高县| 胶南市| http://xfwdza.fit http://www.eljmrm.fit http://m.pshexu.fit http://wap.ukcqji.fit http://m.nonrnt.fit http://wap.kqsyol.fit http://bgiqie.fit http://www.bm1961lotz.fit http://www.vpufvt.fit http://m.nqlgry.fit http://m.abrbgr.fit http://wap.hbkrrq.fit http://wap.sjwpvy.fit http://xrmqts.fit http://m.dsfkhh.fit http://wap.hmtbcx.fit http://wap.sjddrn.fit http://wap.gnytex.fit