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; }