A、暴力
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int main()
{
cin>>n;
int k=0,m=n;
while(m)
{
k=k*10+m%10;
m=m/10;
}
cout<<k+n;
return 0;
}B、
dp吧,这题有题解,我是看题解写的,就不放了;
C、完全平方数的个数(0的时候特判)为(ll)sqrt(r)-(ll)sqrt(l-1),举个例子,例如1~10000,模拟一下即可
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
int main()
{
ll l,r;
ll t;
cin>>t;
while(t--){
cin>>l>>r;
ll ans=0,ans1=0;
if(l==0) cout<<(ll)sqrt(r)+1<<endl;
else cout<<(ll)sqrt(r)-(ll)sqrt(l-1)<<endl;
}
return 0;
} D、
表示只想到了dfs,但数据只过了90%,所以需要看dfs中是否重复搜索;
之后就是dp
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 1100000
int n,head[maxn],q,cnt,f[maxn],tree[maxn][3];
struct edge{
int nx,to;
}edge[maxn*2];
void dfs(int u,int fa,int depth)
{
f[u]=fa;
for(int i=head[u];i;i=edge[i].nx)
{
int v=edge[i].to;
if(v!=fa)
{
dfs(v,u,depth+1);
}
}
}
void add(int u,int v)
{
edge[++cnt].nx=head[u];
edge[cnt].to=v;
head[u]=cnt;
}
int main()
{
cin>>n>>q;
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
add(x,y),add(y,x);
}
dfs(1,0,0);
while(q--)
{
int a;
cin>>a;
tree[f[a]][0]++,tree[f[a]][1]++;
tree[f[f[a]]][0]++;
tree[a][1]++;
tree[a][2]++;
cout<<tree[a][0]+tree[f[a]][1]+tree[f[f[a]]][2]<<endl;
}
}
京公网安备 11010502036488号