1.一道算法题
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
给出三个整数 l,r(l≤r),kl,r(l\leq r),kl,r(l≤r),k,请计算:
(lk+(l+1)k+⋯+rk)mod 2(l^k+(l+1)^k+\dots +r^k)\mod 2(lk+(l+1)k+⋯+rk)mod2
其中,mod\text{mod}mod 代表计算两个数相除后的余数,例如 10 mod 3=1,4 mod 2=010\ \text{mod}\ 3=1, 4\ \text{mod}\ 2=010 mod 3=1,4 mod 2=0。
输入描述:
第一行包含一个整数 T(1≤T≤2⋅105)T(1\leq T \leq 2\cdot 10^5)T(1≤T≤2⋅105),表示测试用例的组数。 对于每组测试用例: 仅输入一行,包含三个整数 l,r(1≤l≤r≤109),k(0≤k≤109)l,r(1\leq l\leq r\leq 10^9),k(0\leq k\leq 10^9)l,r(1≤l≤r≤109),k(0≤k≤109)。
输出描述:
对于每组测试用例: 仅输出一行,包含一个整数,表示答案。
示例1
输入
复制2 1 2 1 2 5 2
2 1 2 1 2 5 2
输出
复制1 0
1 0
#include<bits/stdc++.h>
using namespace std;
int T;
int main(){
cin>>T;
while(T--){
int l,k,r;
cin>>l>>k>>r;
int count=0;
if(k==0){
count=r-l+1;
}else{
for(int i=l;i<=r;i++){
count+=i;
}
}
if(count%2==0){
cout<<0<<endl;
}else{
cout<<1<<endl;
}
}
return 0;
}
刚开始暴力求解,用pow去计算,但时间一直不通过。在学长提示后找到规律。
即一次输入的三个数中几个是偶数,偶数个结果就为0,奇数个结果就为1。注意判断k是否为0。
2. 复习了一些高数知识。求极限中的洛必达、泰勒展开。求和函数。
求和函数的步骤:
1.利用柯西根值法或d'Alembert法先求出收敛半径
2. 根据收敛半径判断在两端点处是否收敛,求出收敛域
3.利用性质3逐项求导,逐项求积分
3.由于专业课较多,周一五节课,周二四节课,周三四节课,暂无其他学习内容。