C题
前示链向星
#include <bits/stdc++.h>
using namespace std;
int fa[200005], siz[200005], vis[200005], f[200005];
vector<int> e[200005], le;
struct edge
{
int sz, sum;
} a[200005];
int len = 0;
int cmp(edge x, edge y)
{
return x.sum < y.sum;
}
int main()
{
long long n;
cin >> n;
for (int i = 1; i <= n - 1;i++)
{
long long x, y;
cin >> x >> y;
e[x].push_back(y);
e[y].push_back(x);
siz[x]++;
siz[y]++;
}
long long k = 0;
for (int i = 1; i <= n; i++)
{
if (siz[i] == 1)
{
k++;
le.push_back(i);
fa[i] = e[i][0];
f[e[i][0]]++;
}
}
long long ans = (k +1)/ 2;
cout << ans << endl;
for (int i = 0; i <= k -1; i++)
{
a[++len] = {le[i], f[fa[le[i]]]};
}
sort(a + 1, a + len + 1, cmp);
for (int i = 1; i <= k / 2; i++)
{
cout << a[i].sz << " " << a[k - i + 1].sz << endl;
}
if (k & 1)
{
cout << a[1].sz << " " << a[k / 2 + 1].sz << endl;
}
return 0;
}D题
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
int x1,f1,s1,x2,f2,s2,z1,z2;
x1 = (a[0]-'0')*10+a[1]-'0';
f1 = (a[3]-'0')*10+a[4]-'0';
s1 = (a[6]-'0')*10+a[7]-'0';
z1 = x1*3600+f1*60+s1;
x2 = (b[0]-'0')*10+b[1]-'0';
f2 = (b[3]-'0')*10+b[4]-'0';
s2 = (b[6]-'0')*10+b[7]-'0';
z2 = x2*3600+f2*60+s2;
cout<<fabs(z2-z1)<<endl;
return 0;
}F题
#include <iostream>
#include<string.h>
using namespace std;
int m,n,k;
int a[5001][5001];
int gong(int a,int b) ///最小公倍数
{
int c,s=a*b;
while(1)
{
if(a%b==0)
{
c=b;
break;
}
else{
c=b;
b=a%b;
a=c;
}
}
return s/c;
}
int main()
{
memset(a,0,sizeof(a));
for(int i=1;i<=5000;i++)
{
for(int j=1;j<=5000;j++)
{
a[i][j]=gong(i,j);
//a[i][j]=max(max(a[i-1][j],a[i][j-1]),gong(i,j));///对应位置最大值
}
}
cin>>m>>n>>k;
long long int s=0;
if(k==1)
{
for(int i=k;i<=m;i++)
{
for(int j=k;j<=n;j++)
{
s+=a[i][j];///从a[k][k]开始取值
}
}
}else
for(int i=k;i<=m;i++)
{
for(int j=k;j<=n;j++)
{
a[i][j]=max(max(a[i-1][j],a[i][j-1]),a[i][j]);
s+=a[i][j];///从a[k][k]开始取值
}
}
cout << s << endl;
return 0;
}


京公网安备 11010502036488号