卡常策略盘点
查看原帖
卡常策略盘点
413065
xiezheyuan楼主2024/9/19 22:10

首先,如果你的分数 < 65pts,先检查时间复杂度。

然后是 >= 65pts 的优化方法:

  • 求逆元的时候,用 __gnu_pbds::gp_hash_table 记忆化(会计算很多重复数逆元)
  • 优化取模:
const __int128 _base = (((__int128)(1)) << 64) / mod;
inline int fastmod(long long x){return (int)(x-mod*(_base*x>>64));}
int Add(int x, int y){ return (x + y) >= mod ? (x + y - mod) : (x + y); }
int Mul(int x, int y){ return fastmod(1ll * x * y); }
  • 快读快输
  • register 和 C++ 98
  • 多用 memset / memcpy,这两个玩意会调用 SIMD 指令提高速度。
  • FWT 的时候,不要用 op 去乘,而是用简单加减替代:
int op1(int x){ return x; }
int op2(int x){ return mod - x; }
std::tr1::function<int(int)> opize = (op == 1) ? op1 : op2;
  • 适当调整数组的下标,保证缓存命中率。具体来说,下标连续变化的放到最后,大部分时刻不会变化的放到前面。
  • 不要开 long long

不保证上述都有很大效果,但至少加起来可以通过本题。

话说 2022 省选考了这道题的应该是很噩梦吧

2024/9/19 22:10
加载中...