AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
string s;
cin>>s;
for(int i=0;i<s.size();i++){
if(i%2==0) swap(s[i],s[i+1]);
}
cout<<s<<endl;
return 0;
}
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<set>
using namespace std;
set<int>s;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(!s.count(i)) s.insert(x);
}
int cnt=0;
for(int i=1;i<=n;i++)
if(!s.count(i)) cnt++;
cout<<cnt<<endl;
for(int i=1;i<=n;i++){
if(!s.count(i)) cout<<i<<" ";
}
return 0;
}
dfs搜索每一条从起点到终点的路,如果满足条件就加1
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<set>
using namespace std;
const int N=20;
int a[N][N];
int h,w;
set<int>s;
int res;
void dfs(int x,int y){
if(x==h&&y==w&&!s.count(a[x][y])) res++;
else{
if(s.count(a[x][y])) return;
s.insert(a[x][y]);
if(x+1<=h) dfs(x+1,y);
if(y+1<=w) dfs(x,y+1);
s.erase(a[x][y]);
}
}
int main()
{
cin>>h>>w;
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
cin>>a[i][j];
}
}
dfs(1,1);
cout<<res<<endl;
return 0;
}
一共有N根绳子,编号为1到N,每一根绳子一端为红色,一般为蓝色
一共有M次操作,每一次操作都是将一根绳子的一端和另一根绳子的一端连在一起
最后输出形成环的绳子的条数以及没有形成环的绳子条数
和颜色并没有关系
可以用并查集,然后将连在一起的放在同一个连通块中,如果发现x和y已经在同一个连通块中了,那么就成环了,那么cnt计数+1,cnt即为成环的绳子的条数
最后数一下一共有几个连通块,用它减去cnt即为没有形成环的绳子条数
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#define int long long
using namespace std;
const int N=2e5+10;
int p[N];
int find(int x){
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
}
void solve()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) p[i]=i;
int a,b;
char ch1,ch2;
int cnt=0;
for(int i=0;i<m;i++){
cin>>a>>ch1>>b>>ch2;
int x=find(a),y=find(b);
if(x!=y) p[x]=y;
else cnt++;
}
int cnt1=0;
for(int i=1;i<=n;i++){
if(p[i]==i) cnt1++;
}
cout<<cnt<<" "<<cnt1-cnt<<endl;
}
signed main()
{
solve();
return 0;
}