L2-024 部落 - 并查集
PTA | 程序设计类实验辅助教学平台
#include <bits/stdc++.h>
using namespace std;
const int N=1e4+10;
set<int> s;
int f[N];
int find(int x)
{
if(x!=f[x]) f[x]=find(f[x]);
return f[x];
}
void unite(int a,int b)
{
int x=find(a);
int y=find(b);
if(x!=y) f[x]=y;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<N;i++) f[i]=i;
while(n--)
{
int k;
cin>>k;
int x;
cin>>x;
s.insert(x);
for(int i=1;i<k;i++)//放到一个集合里
{
int y;
cin>>y;
unite(x,y);
s.insert(y);
}
}
int res=0;
for(auto x:s) if(f[x]==x) res++; //统计集合数量
cout<<s.size()<<" "<<res<<endl;
int q;
cin>>q;
while(q--)
{
int a,b;
cin>>a>>b;
if(find(a)==find(b)) puts("Y"); //查询a和b是否在一个集合
else puts("N");
}
return 0;
}
L1-046 整除光棍 - 20 - 模拟除法
PTA | 程序设计类实验辅助教学平台
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x,t=1,cnt=0;
cin>>x;
int sum=0;
while(sum<x)
{
sum+=t;
t*=10;
cnt++;
}
while(true)
{
cout<<sum/x;
if(sum%x==0) break;
sum=sum%x*10+1;
cnt++;
}
cout<<" "<<cnt;
}
L1-048 矩阵A乘以B - 15
PTA | 程序设计类实验辅助教学平台
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m,n,a,b;
int pa[101][101],pb[101][101];
cin>>m>>n;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++) cin>>pa[i][j];
cin>>a>>b;
if(n!=a)
{
cout<<"Error: "<<n<<" != "<<a;
return 0;
}
for(int i=0;i<a;i++)
for(int j=0;j<b;j++) cin>>pb[i][j];
cout<<m<<" "<<b<<endl;
for(int i=0;i<m;i++)
{
for(int j=0;j<b;j++)
{
int sum=0;
for(int k=0;k<a;k++)
{
sum+=pa[i][k]*pb[k][j];
}
cout<<sum;
if(j!=b-1) cout<<" ";
}
cout<<endl;
}
return 0;
}
L1-047 装睡 - 10
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
string s;
cin>>s;
int h,m;
cin>>h>>m;
if(h<15||h>21||m<50||m>70) cout<<s<<endl;
}
}