《讲几个笑话》题解

· · 个人记录

应一些人的要求贴上来(强烈建议仔细想过之后再看)

void Tarjan(int u,int from)
{
  dfn[u]=low[u]=++dfscnt;
  for(int e=head[u];e;e=nxt[e]){
    int v=to[e];
    if(v==from) continue;
    if(!dfn[v]){
      Tarjan(v,e);
      low[u]=min(low[u],low[v]);
    }
    else{
      low[u]=min(low[u],dfn[v]);
    }
  }
}

Tarjan(v,e) 是什么鬼

#define int unsigned long long
int pw[70];
for(int i=63;i>=0;i--) pw[i]=1ull<<i;

i>=0 什么时候成立?

int ans,n;
void dfs(int d)
{
  if(d==n){
    ans++;
  }
  dfs(d+1);
}

老兄不return了是吧

int p[N],cnt,vis[N];
for(int i=2;i<=1000000;i++){
  if(!vis[i]){
    p[++cnt]=i;
    for(int j=i+i;j<=1000000;j++) vis[j]=1;
  }
}

j++(

int n,tot;
cin>>n;
while(n--){
  int x;
  cin>>x;
  tot+=x;
}
cout<<tot/n<<endl;

n=?

这个比较难

string s="";
for(int i=0;i<=s.size()-1;i++){
  cout<<s[i];
}

s.size()是unsigned long long类型的,s.size()-1与你的RP相同((

int f[N][20];
for(int j=1;j<=20;j++){
  for(int i=1;i<=n-(1<<j)+1;i++){
    f[i][j]=max(f[i][j-1],f[i+(1<<j)][j-1]);
  }
}

f[N][20]对吧

const int N=1005,M=1e6+5;
int n,m; //n<=1000,m<=1000000
int head[N],nxt[N],to[N],edge[N],tot;
cin>>n>>m;
for(int i=1;i<=m;i++){
  int x,y,z;
  cin>>x>>y>>z;
  add_edge(x,y,z);
  add_edge(y,x,z);
}

显然M不见了

const int N=1000005;
int vis[N];
for(int i=1;i<=N;i++) vis[i]=1;

同样的N

int n,cnt;
cin>>n;
for(int i=2;i<=n;i++){
  if(n%i==0){
    cnt++;
    while(n%i==0) n/=i;
  }
}
printf("%d has %d prime factors\n",n,cnt);

n=?

后面不写了,累了累了(还有不懂的直接私信我)