Codeforces Round 871 (Div. 4) G. Hits Different (二维前缀和/思维)
题目连接:1829g
题目意思是:找出某个数字及其上方的相关点的值的平方和
赛时没想到这个斜过来的操作导致没看出来数字的分布情况,进而没看出来是个二维前缀和
题目给的图没看出来结论,导致推了几个fake出来
后面看了题解才明白:原来斜过来能发现数字的分布规律,进而可以用二维前缀和来求解
发现数字的规律是:成斜线自左下向右上填充
因此可以枚举y=x+c的c,将其填入
code:
const int N =1505;
/*
//关于为什么要把边长设置为1500
因为我们看到题目写道,n的最大值为1e6
而这个数组中有效的范围其实只有那个三角形(S=n*n*1/2)
因此凑一个数满足n*n*1/2>=1e6即可
此时不难想起15*15=225,故选择n=1500
*/
long long g[N][N];
long long ans[5000005];
long long c=1;//为何用long long? 这个c后续就是题目中给的n(n<1e6),因此要开long long防止出现1e6*1e6爆int的情况
inline void solve(){
for(int i=1;i<=N;i++){
for(int j=i,k=1;j>0;j--,k++){
g[j][k]=g[j-1][k]+g[j][k-1]-g[j-1][k-1]+c*c;
ans[c++]=g[j][k];
}
}
}
int main(){
cin_unlocked();
int t;cin>>t;
solve();
for(;t--;){
int x;cin>>x;
cout<<ans[x]<<endl;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】