memset灵异事件

P1591 阶乘数码

Ohno @ 2023-01-05 21:30:28

今天用memset赋值数组元素,因为我太蒻了,函数的元素顺序写反了。

but 这份代码竟然神奇的AC了!

百思不得其解。(mian函数第一行


#include<bits/stdc++.h>
using namespace std;
int b[1005][2500],n,t,a;
int main(){
    memset(b,sizeof(b),0);
    b[0][0]=b[1][0]=1;
    for(int i=1;i<=1001;i++){
        for(int j=0;j<2500;j++){
            b[i][j]*=i;
        }
        for(int j=0;j<2500;j++){
            if(b[i][j]>9){
                b[i][j+1]=b[i][j+1]+b[i][j]/10;
                b[i][j]=b[i][j]%10;
            }
            b[i+1][j]=b[i][j];
        }
    }
    cin>>t;
    while(t--){
        cin>>n>>a;
        long long ans=0;
        int ii=2500;while(ii>=0 and b[n][ii]==0)ii--;
        for(int j=ii;j>=0;j--)if(b[n][j]==a)ans++;
        cout<<ans<<'\n';
    }
    return 0;
}

by yukimianyan @ 2023-01-05 21:32:11

memset(xxx,yyy,0) 相当于 ;,然而因为 b 本来就是空的,所以正确


by Katz @ 2023-01-05 21:33:07

所以为什么要memest啊


by Winston12321_ @ 2023-01-05 21:34:10

@Ohno 全局变量没有被修改相当于就是0?


by wei_xin @ 2023-01-05 21:35:27

该函数的效果是将第二个参数对应的十六进制码循环地放到从第一个参数开始的,长为第三个参数的地址上。

这里你的长度为 0,故这个 memset 其实没有任何效果,又全局变量默认置 0,故相当于达到了你所期望的 memset 的效果。于是。


by Ohno @ 2023-01-05 21:45:14

@wei_xin thx,灵异告破,此贴结。


by andyyzc @ 2023-03-03 22:06:10

真牛逼


|