社区讨论
60求调
P7113[NOIP2020] 排水系统参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m2k3uka0
- 此快照首次捕获于
- 2024/10/22 15:09 去年
- 此快照最后确认于
- 2025/11/04 16:32 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int flag[15],w[maxn][4000];
bool judge[maxn],maybe[maxn];
struct fenshu{
unsigned long long fenzi;
unsigned long long fenmu;
}ans[maxn];
long long gcd(unsigned long long a,unsigned long long b){
if(b==0)return a;
return gcd(b,a%b);
}
void he(int x,fenshu b){
if(ans[x].fenmu==0)ans[x].fenmu=b.fenmu,ans[x].fenzi=b.fenzi;
else {
unsigned long long p1=ans[x].fenmu,q1=ans[x].fenzi,q2=b.fenzi,p2=b.fenmu,math1=gcd(p1,p2);
if(math1==1){
ans[x].fenmu=p1*p2;
ans[x].fenzi=(p1*q2)+(p2*q1);
}
else {
unsigned long long math2=p1*p2/math1;
ans[x].fenmu=math2;
ans[x].fenzi=q1*(math2/p1)+q2*(math2/p2);
}
unsigned long long math3=gcd(ans[x].fenmu,ans[x].fenzi);
ans[x].fenmu/=math3;
ans[x].fenzi/=math3;
}
}
void jian(int i){
int zhen=0;
if(ans[i].fenzi==ans[i].fenmu){
ans[i].fenzi=1,ans[i].fenmu=1;
return;
}
if(ans[i].fenzi>ans[i].fenmu)zhen=ans[i].fenzi/ans[i].fenmu;
unsigned long long n=gcd(ans[i].fenmu,ans[i].fenzi);
ans[i].fenmu/=n;
ans[i].fenzi/=n;
ans[i].fenzi+=ans[i].fenmu*zhen;
}
int main(){
// freopen("water.in","r",stdin);
// freopen("water.out","w",stdout);
int n,m,x[maxn]={},sum=1;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",x+i);
for(int j=1;j<=x[i];j++){
scanf("%d",&w[i][j]);
judge[w[i][j]]=1;
}
}
for(int i=1;i<=n;i++)if(judge[i]==0)flag[sum]=i,sum++,maybe[i]=1;
for(int i=1;i<=n;i++){
bool wy=1;
if(x[i]==0)continue;
for(int k=1;k<sum;k++)if(flag[k]==i){
fenshu time;
time.fenmu=x[i],time.fenzi=1;
for(int j=1;j<=x[i];j++){
he(w[i][j],time);
}
ans[flag[k]].fenmu=0;
wy=0;
break;
}
if(wy==1){
fenshu time;
time.fenmu=ans[i].fenmu*x[i],time.fenzi=ans[i].fenzi;
for(int j=1;j<=x[i];j++){
he(w[i][j],time);
}
ans[i].fenmu=0;
maybe[i]=1;
}
}
for(int i=1;i<=n;i++){
if(maybe[i]==0){
jian(i);
printf("%lld %lld",ans[i].fenzi,ans[i].fenmu);
printf("\n");
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
不改算法该怎样优化?
硬模拟到60已经很逆天了
回复
共 1 条回复,欢迎继续交流。
正在加载回复...