打卡信奥刷题(2142)用C++实现信奥 P12174 [蓝桥杯 2025 省 Python B] A · B Problem
·
P12174 [蓝桥杯 2025 省 Python B] A · B Problem
题目描述
设有两个二维向量 A→(XA,YA),B→(XB,YB)\overrightarrow{A}(X_A, Y_A), \overrightarrow{B}(X_B, Y_B)A(XA,YA),B(XB,YB)。给定 LLL,求 (XA,YA),(XB,YB)(X_A, Y_A), (X_B, Y_B)(XA,YA),(XB,YB) 有多少种不同的取值,使得:
- XA,YA,XB,YBX_A, Y_A, X_B, Y_BXA,YA,XB,YB 均为正整数;
- A→⋅B→≤L\overrightarrow{A} \cdot \overrightarrow{B} \leq LA⋅B≤L,其中 A→⋅B→\overrightarrow{A} \cdot \overrightarrow{B}A⋅B 表示 A→,B→\overrightarrow{A}, \overrightarrow{B}A,B 的内积,即 XA⋅XB+YA⋅YBX_A \cdot X_B + Y_A \cdot Y_BXA⋅XB+YA⋅YB。
输入格式
输入的第一行包含一个正整数 LLL,表示题目描述中的限制条件。
输出格式
输出一行包含一个整数表示答案。
输入输出样例 #1
输入 #1
2
输出 #1
1
输入输出样例 #2
输入 #2
3
输出 #2
5
说明/提示
评测用例规模与约定
- 对于 40%40\%40% 的评测用例,L≤50L \leq 50L≤50;
- 对于 80%80\%80% 的评测用例,L≤5000L \leq 5000L≤5000;
- 对于所有评测用例,1≤L≤2201 \leq L \leq 2^{20}1≤L≤220。
C++实现
#include<bits/stdc++.h>
using namespace std;
const int mxn=1.05e6+2;//2^20
int f[mxn],n;//f[i]=d(i)
inline void pre(int x){
bool fl=0;
for(int i=1;i*i<=x;i++){
f[x]+=!(x%i);
if(i*i==x) fl=1;
}
f[x]<<=1;
f[x]-=(fl);
}
unsigned long long ans;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) pre(i);
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
ans+=f[j]*f[i-j];
}
}
cout<<ans<<endl;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
更多推荐


所有评论(0)