T1
tile
列方程 ax/b=cy/d,adx=bcy,化简令x=化简后的值,输出a*x/b。
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
ll read()
{
ll res=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
res=res*10+ch-'0';
ch=getchar();
}
return res*f;
}
ll gcd(ll a,ll b)
{
if(!b) return a;
else return gcd(b,a%b);
}
ll t,a,b,c,d,x,y,g;
int main()
{
freopen("tile.in","r",stdin);
freopen("tile.out","w",stdout);
t=read();
while(t--)
{
a=read();b=read();c=read();d=read();
x=b*c;y=a*d;g=gcd(x,y);
x=x/g;y=y/g;
x=x*a;g=gcd(x,b);
if(x%b==0)
{
cout<<x/b<<endl;
}
else cout<<x/g<<"/"<<b/g<<endl;
}
fclose(stdin);
fclose(stdout);
return 0;
}
T2
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int maxn=210000;
int read()
{
int res=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
res=res*10+ch-'0';
ch=getchar();
}
return res*f;
}
int n,t,maxx;
ll sum;
int head[maxn],to[2*maxn],next[2*maxn],w[2*maxn];
int du[maxn],m1[maxn],m2[maxn],m3[maxn];
void add(int x,int y,int z)
{
t++;next[t]=head[x];head[x]=t;to[t]=y;w[t]=z;
}
void deal(int x,int z)
{
if(m1[x]<z)
{
m3[x]=m2[x];m2[x]=m1[x];m1[x]=z;return ;
}
if(m2[x]<z)
{
m3[x]=m2[x];m2[x]=z;return ;
}
if(m3[x]<z)
{
m3[x]=z;return ;
}
}
int main()
{
freopen("question.in","r",stdin);
freopen("question.out","w",stdout);
n=read();
for(int i=1;i<n;i++)
{
int x,y,z;
x=read();y=read();z=read();
add(x,y,z);add(y,x,z);
du[x]++;du[y]++;
deal(x,z);deal(y,z);
}
for(int i=1;i<=n;i++)
{
if(du[i]==1) continue;
for(int j=head[i];j;j=next[j])
{
int v=to[j],weight=0;
if(du[v]<3) continue;
ll x=du[i]-1;
ll y=du[v]-1;
y=y*(y-1)/2;
sum+=x*y;
if(w[j]==m1[i])
{
weight=m1[i]+m2[i];
}
else weight=m1[i]+w[j];
if(w[j]==m1[v])
{
weight+=m2[v]+m3[v];
}
else
{
if(w[j]==m2[v])
{
weight+=m1[v]+m3[v];
}
else weight+=m1[v]+m2[v];
}
maxx=max(maxx,weight);
}
}
cout<<sum<<endl;
cout<<maxx;
fclose(stdin);
fclose(stdout);
return 0;
}