目录
1.P8605 [蓝桥杯 2013 国 AC] 网络寻路
思路:
加边函数可结合链表理解,如图右
考点:dfs深度搜索
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+10;
int h[N],e[N],ne[N],idx;
void add(int a,int b) //加边函数 ,可利用链表理解
//idx表示一个空点,e[idx]代表其编号
//ne[idx]代表指针,h[a]表示
{
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
int ans=0;
void dfs(int x,int fa,int cnt)
{
if(cnt==4)//有4个节点结束
{
ans++;
return;
}
//h[x]表示开始的头节点
//i!=-1也可写成~i
for(int i=h[x];i!=-1;i=ne[i])
{
int j=e[i];
if(j==fa)continue;
dfs(j,x,cnt+1);
}
return ;
}
int main()
{
int n,m;
cin>>n>>m;
memset(h,-1,sizeof h);//h为头结点,置为-1,代表每个点都指向-1,实现截止标志
//存边
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
add(x,y);add(y,x);//实现双向边
}
//从每个点出发,枚举所有开始的点
for(int i=1;i<=n;i++)
{
//分别代表第i个点开始,它的父节点是什么,当前这条路径有多少个点
//父节点是为了防止往回走
dfs(i,-1,1);//从第i个点出发,由于每个点从-1开始,则-1为其father,cnt表示当前的节点数量
}
cout<<ans<<endl;
}
2.P8597 [蓝桥杯 2013 省 B] 翻硬币

考点:
贪心(不是动态规划,因为没有后效性,即前面的决策不会影响后面的决策)
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
string s1,s2;
cin>>s1>>s2;
int ans=0;
for(int i=0;i<s1.size()-1;i++)
{
if(s1[i]!=s2[i])
{
if(s1[i+1]=='*')
s1[i+1]='o';
else s1[i+1]='*';
ans++;
}
}
cout<<ans<<endl;
return 0;
}