向各位大佬们求助!
2024-07-04 20:48:59
发布于:上海
原题
这是我的代码
using namespace std;
int a[1000000];
int d(int x){
int sum=0;
while(x>0){
sum+=x%10;
x/=10;
}
return ((sum>9)? d(sum):sum);
}
int main(){
int p;
long long n,sum=0;
cin>>n;
if (n>=10) cout<<n*n-23;
else {
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
if (a[i]==0)a[i]=d(i);
if (a[j]==0)a[j]=d(j);
p=d(a[i]*a[j]);
if (p<=n&&p!=i*j) sum++;
}
}
cout<<sum;
}
}
注:d是找树数根的函数。
个人对题目的理解是:
找到满足d(xy)=d(z)且xy!=z且1<=x,y,z<=n的(x,y,z)的组数,大于十的时候不满足条件的只有23对,所以我直接用总的,也就是(x,y,xy)的组数,减去23,如有错误欢迎指正。
最后一个测试点错了,还不能查看测试点。
如有常识性错误请大家谅解,本人萌新。
全部评论 2
CF 的判题规则是只要碰到一个 WA,之后就不会继续判了。这道题其实有四十多个测试点。
2024-07-04 来自 浙江
0这道题难度标错了,原题的难度在
提高+/省选−
组别。(当时搬运题目的时候还没有对题目难度进行调整)。得用容斥原理做这道题。2024-07-04 来自 浙江
0可以思考一下这个公式:。
2024-07-04 来自 浙江
1看到了 谢谢🙏
2024-07-09 来自 上海
0
有帮助,赞一个