这只是一个作业,如果有帮到您的,我只能说。。。这不科学。。。
————————————华丽的分割线————————————
第一题:
这题很水双重for枚举直n次输出当然你要数论我也没办法
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
————————————华丽的分割线————————————
第二题:
也很水枚举每个?的周围然后输出这里是代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
话说 为什么每年都要来一个游戏啊(什么时候出MC是个问题)
————————————华丽的分割线————————————
第三题:
首先你会发现y没任何用只是确定x,z奇偶性相同。。。
然后貌似要用数论什么乘法分配律来搞
一头雾水(我才刚初一数学很弱)
所以把推理打出来不解释
答案等于a1*(num a1*(n-1)+num a2+ num a3+……+num an)+ a2*(num a2*(n-1)+num a1+ num a3+……+num an)+……+an*(num a1*+num a2+ num a3+……+num an*(n-1))
用sum来表示num从a1到an的和,用sum2表示a1到an的和,答案=sum*sum2+(n-2)*sum2
不过%10007什么的很恶心qwq
代码(全是被模搞长的!!!):
#include
#include
#include
#include
#include
#include
#include
#include
#include
————————————华丽的分割线————————————
第四题:
这道题因该是数结qwq
首先为了让答案最大我们把每个家都记一个分值=路程*2+推销的疲劳值
然后每次推销加上这个值就好了。
不过每次操作后每家的路程对答案的贡献都会减小(为什么你知道的)
不过也不能全部都减我们记一个max为选了要去推销的家的最远路程。
比这个路程多的要全减少的清零。
所以我们开两个优先队列:
struct fam
{
int s,poi,nu;
bool operator<(fam b)const
{
if(poi!=b.poi)return poi L,R;
然后每次把两个队列最大的数分别拿出来对比小的放回去
然后更新max以max为界重新更新两个队列
就完了qwq下面代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
数结好题。
————————————华丽的分割线————————————
2015好水!!!!