非官方题解 | 巅峰赛#37 T4
2026-08-17 14:09:43
发布于:天津
13阅读
0回复
0点赞
4.午枫的罗盘
思路
(只给出一个公式,具体怎么出的......举了几个例子,一个一个数,发现总和是几个0 加上 等差数列 加上 几个+2,然后用奥数知识推导的公式。导出来后,一晚上没睡着。)
注意看题

同时,看到T好大,当时 xkl,但也说明我们的时间复杂度必须压到!然后想到推导公式
首先想,k是奇数可能出现直角吗。
答案肯定是不能。学过旋转(小学入门,9年级进阶)的都知道这件事情
式子:
long long q=num/k,r=num%k;
if(2*r<k) ans=q*(k*q+2*r+2)/2;
else ans=(q+1)*(k*(q-1)+2*r+2)/2;
cout<<ans<<endl;
continue;
然后100pts;
我的代码
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int t;cin>>t;
while(t--){
int num,k;
cin>>num>>k;
num--;//因为我的公式,从0开始算的,所以要-1(当时我没减,错了,老师了)
if(k%2==0){ //偶数能凑!
long long q=num/k,r=num%k,ans=0;
if(2*r<k) ans=q*(k*q+2*r+2)/2;
else ans=(q+1)*(k*(q-1)+2*r+2)/2;
cout<<ans<<endl;
continue;
}
cout<<0<<endl;//奇数的话是不可能凑得直角
}
return 0;
}
这里空空如也





有帮助,赞一个