bzoj2956 模积和

2019-04-13 14:48发布

class="markdown_views prism-atom-one-light"> 题目链接:bzoj2956
题目大意:
ni=1mj=1(nmodi)×(mmodj),ij 题解:
数论+分块
看清题啊ij
所以式子就变成:i=1nj=1m(nmodi)×(mmodj)i=1min(n,m)(nmodi)×(mmodj)
bzoj1257那样处理
于是就变成了:i=1nj=1m(ni×ni)×(mj×mj)i=1min(n,m)(ni×ni)×(mj×mj)
傻傻的我把两边都拆开直接搞了。
于是对于ni=1mj=1i×j×ni×mj表示打了个O(nm)的…诶好蠢啊ww
应该把式子化成:
i=1n(ni×ni)j=1m(mj×mj)i=1min(n,m)(ni×ni)×(mj×mj))
这样前面的就可以把nm提出来之后像bzoj1257那样分块搞,后半式的话拆开之后也是类似的,用分块来做(像bzoj2301那样)。 总结:
有时可以考虑内外层求和对调啊
还有分块的套路要熟悉。要有意识看到nini×mj之后用分块啊 话说,这题mod得我真恶心,因为mod得不够多WA了两三次! #include #include #include #include #include #include using namespace std; typedef long long LL; const LL ny=