下午去干了一下 Atcoder AGC070A。
感觉脑子有点爆掉了,但好在我觉得我是理解了。
感觉大致还是从小学时候的 \(1 / 7 = 0.141857\cdots\) 这个 \(142857\) 的回马灯数(是这么叫的?)入手。
发现这样子只需要拼出一个 \(142857142857\) 就能满足 \(1\sim 6\) 的限制。
考虑这是为什么,能发现模拟竖式乘法的时候,前 \(p - 1\) 留给下一轮的数都不一样,且 \(p - 1\) 轮过后留下的是 \(1\)。
那么这说明 \(\bmod\ p = 1\sim p - 1\) 其实都在里面出现了,并且是个循环节,考虑先把除出来上面的小数部分的 \(x\) 拿下来。
那么这个时候考虑 \(x \bmod p = 1\),那么 \(2x\bmod p = 2\),那么 \(2x\) 就出现在从竖式除法给下一轮留下 \(2\) 开始除 \(p - 1\) 轮除出来的地方。
于是能发现 \(1\sim p - 1\) 都能构造出来了。
对于这个题,把 \(1001\sim 2500\) 合法的 \(p\) 跑一下就可以了。
#include<bits/stdc++.h>
int main() {std::vector<int> setp;for (int p = 1001; p <= 2500; p++) {static int vis[2503];memset(vis, 0, sizeof(vis));int x = 1;for (int i = 1; i < p; i++) vis[(x *= 10) %= p]++;bool f = x == 1;for (int i = 1; i < p; i++) f &= vis[i];if (f) {setp.push_back(p);}}std::mt19937_64 rnd(std::chrono::steady_clock::now().time_since_epoch().count());int p = setp[rnd() % setp.size()];std::string s;int x = 1;for (int i = 1; i < p; i++) {x *= 10, s += (x / p) + '0', x %= p;}int w = 0;while (s[w] == '0') w++;std::cout << s.substr(w, s.size()) << '\n' << s << s << '\n';return 0;
}
今天写了个 Solution - Luogu P11456 [USACO24DEC] Interstellar Intervals G。
感觉写完受益颇深阿。
其实感觉写题解要写细一点,这样子就可以反思自己在想这题时“直观 / 看一眼就知道的”一些结论 / 维护方式本质是由什么得到的。
我觉得这样子才能去剥开这个解法的本质阿。
当然其实从 noip 后的题解都已经变成这样了。
甚至来说其实从暑假开始就慢慢变了来着。
但是我非常好奇的一件事是为什么 Diary 的阅读量会显著比 Solution 高???
难道翻到一个人的博客会多看看日记和游记是每个人都具有的特质吗(。
其实感觉下午还能干些事的,但是被拉去听知识点分享了。
怎么说呢,感觉其实不想知识点分享,更像是一个专题题单。
我感觉这还是不太一样的。
知识点分享更像是,讲细一个知识点,仔细剖分。
而专题相对来说,更注重应用一些。
或者说这个本身就是专题分享吧,但我感觉有点别扭。
主要是知识点反倒是,额,提一下就差不多走了,剩下时间都是题,,,
毕竟看起来初衷可能是知识点分享?。
但是题还是不错的,确实很帅。
按理来说我应当在这里写一些学到的比较帅的东西,但是现在要没时间了,所以我就不写了(要不还是明天写写总结一下)。
感觉我现在多少有点不听教练的安排,题单是根本不动的?
我觉得我还是要解释一下的(。
感觉就是 noip 有点炸了过后,我想试试我自己努力能到什么地步,所以这段时间基本都由自己掌控。
成果可以在 pkuwc 和 wc 验收一下,如果不行就动态调整一下,毕竟那个时候离省选也还有一个月多点吧吧(?)。
唉呀我可能不是很有时间观念,额额。
而且还有个原因是,我确实不是很想做专题题单。
有一种,我已经看了算法标签,知道这个要套些什么的美。
还是可能纯杂题更好一些?