小总结:
L1除了1-8都做出来了,下篇博客讲1-8,并复习一下STL的string
L2-3 以为1就是起点,只得了18分
L2-1没时间做
L2-2不会,听说是LCA
L2-1:
主要是用对数据结构:
①pre数组 记录是否独立
②vis数组 记录是否死循环
死循环打标记是关键,如果开二维vis可不用每次memset,但如果题目n更大,会爆空间
③vector 链表 记依附的个数
#include<bits/stdc++.h>
using namespace std;
vector<int>v[10005];
bool vis[10005];
int pre[10005];
int main()
{
int l,r;
cin>>l>>r;
for(int i=l;i<=r;i++)pre[i]=i;//暂时认为前驱是本身,是幸福数
for(int i=l;i<=r;i++)
{
int t=i;
int sum=0;
memset(vis,false,sizeof(vis));
while(t!=1)
{
sum=0;
while(t)
{
sum+=(t%10)*(t%10);
t/=10;
}
t=sum;
// cout<<i<<" "<<sum<<endl;
if(vis[t])
{
pre[i]=-1;//没有依附但不是幸福数
break;
}
vis[t]=true;
pre[t]=i;
v[i].push_back(t);
}
}
int you=0;
for(int i=l;i<=r;i++)
{
int cnt=v[i].size();
if(pre[i]==i)//前驱是本身说明没依附
{
you++;
int flag=1;
for(int j=2;j<=sqrt(i);j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag)cnt*=2;
cout<<i<<" "<<cnt<<endl;
}
}
if(you==0)cout<<"SAD"<<endl;
}