题目 代码 #include<cstdio>#include<cmath>using namespace std; int g,ans; int main(){scanf("%d",&g); for (int i=1;i<=sqrt(g);i++)if (g%i==0) ans+=i+g/i; if (sqrt(g)*sqrt(g)==g) ans-=sqrt(g); print
分析: 对于改变,用一个数组记录改变值,求值时,从当前点往根节点走,遇到一个点看该点到求值的点的距离的奇偶,对应加减即可,距离可以每上一层就加1,要先预处理出每个点的父亲即可。 代码: varn,m,i,x,y,s,j,d:longint;f,t,w,b,e:array[1..100000] of longint;v:array[1..100000] of boolean;a:arr
题目 解题思路 模拟 代码 #include<cstdio>#include<iostream>using namespace std; long long a,b,c,d,ans,uppe; int main(){cin>>a>>b>>c>>d>>uppe; if (a<=uppe) ans=(uppe-a)/b+1; //等差数列求项数while (c<=u
题目: 作者思路:dp,dp,dp!!! f[j,k]:=min(f[j-1,k]+a[j]+b[j]i,f[j-1,k-1]+b[j](i-k)); 初值:f[j,0]:=f[j-1,0]+a[j]+b[j]*i; 代码: var a,b:array[-1..51] of longint;f:array[-1..51,-1..51] of longint;i,j,k,n,t,h:l