搜索
1、选数 P1036 [NOIP2002 普及组] 选数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <iostream>
#include <cmath>
using namespace std;
int n,k,a[35000],ans=0;
int isPrime(int h)
{
for(int i=2;i<=sqrt(h);i++)
{if(h%i==0)
return 0;}
return 1;
}
void dfs(int q, int z,int sum)
{
if(z==k)
{
if(isPrime(sum)==1) ans++;
return ;
}
if(q==n+1)
return ;
dfs(q+1,z+1,sum+a[q]);
dfs(q+1,z,sum);
}
int main()
{
cin>>n>>k;
int i;
for(i=1;i<=n;i++)
cin>>a[i];
dfs(1,0,0);
cout<<ans;
}
(使用bool函数一直wrong answer (ㄒoㄒ))
输入案例:
4 3 3 7 12 19输出:
1
2、求细胞数量:P1451 求细胞数量 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<iostream>
using namespace std;
int ans;
int dr[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
bool b[105][105];
void search(int x,int y)
{
b[x][y]=false;
for(int i=0;i<4;i++)
{
int nx=x+dr[i][0],ny=y+dr[i][1];
if(b[nx][ny])search(nx,ny);
}
}
int main()
{
int n,m;
char k;
cin>>m>>n;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cin>>k;
if(k!='0')b[i][j]=true;
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(b[i][j])
{
search(i,j);
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}
输入案例:
4 10 0234500067 1034560500 2045600671 0000000089输出:
4
3、植树:P6591 [YsOI2020]植树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <bits/stdc++.h>
using namespace std;
vector <int> es[1000000+100];
bool root[1000000+100];
int d[1000000+100],n;
int dfs(int x,int father)
{
int size1 = es[x].size(),num = 0;
root[x] = 1;
for(int i=0;i<=size1-1;i++)
if(es[x][i] != father)
{
d[x] += dfs(es[x][i],x);
if(!num)
num = d[es[x][i]];
if(num != d[es[x][i]])
root[x] = 0;
}
++d[x];
if(x != 1 && num && num != n - d[x])
root[x] = 0;
return d[x];
}
int main()
{
cin>>n;
int a,b;
for(int i=1;i<=n-1;i++)
{
cin>>a>>b;
es[a].push_back(b);
es[b].push_back(a);
}
dfs(1,0);
for(int i=1;i<=n;i++)
if(root[i])
cout<<i<<" ";
cout<<endl;
return 0;
}
输入案例:
4 1 2 2 3 3 4输出:
1 4