E C语言级别 排序一下按题目要求输出就好 随意操作完全不卡时间
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct vi{ char s[55]; int x; }a[222];
bool cmp(vi q,vi w)
{
if (q.x == w.x)
return strcmp(q.s, w.s) < 0;
return q.x > w.x;
}
int main()
{
int n, i, m, j;
char ss[55];
while (scanf("%d", &n) && n)
{
for (i = 0; i < n; i++)
scanf("%s%d", a[i].s, &a[i].x);
sort(a, a + n, cmp);
for (i = 0; i < n; i++)
printf("%s %d\n", a[i].s, a[i].x);
scanf("%d", &m);
while (m--&&scanf("%s", ss))
{
for (i = 0; i < n; i++)
if (strcmp(ss, a[i].s) == 0)
break;
j = i - 1;
while (a[j].x == a[i].x)
j--;
printf("%d", j + 2);
if (j != i - 1)
printf(" %d", i - j);
puts("");
}
}
}
K 同巨水题
求去掉1点后2点间的最短路的最大值 但数据太小 暴力floyd最短路加枚举就好O(n^4) 没什么坑点 虽然很容易想到O(n^2logm)的算法
现场应该40min内写完这2题的..
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int mp[33][33], mm[33][33], i, j, k, q, ans, n, m, x, y, z;
int main()
{
while (scanf("%d%d", &n, &m) && n + m)
{
for (i = 0; i <= n; i++)
for (j = 0; j <= n; j++)
mp[i][j] = 1 << 25;
for (i = 0; i < m; i++)
{
scanf("%d%d%d", &x, &y, &z);
mp[x][y] = mp[y][x] = min(mp[x][y], z);
}
ans = -1;
for (q = 2; q < n; q++)
{
memcpy(mm, mp, sizeof(mm));
for (k = 1; k <= n; k++)
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (i != q&&j != q&&k != q&&mm[i][k]!=1<<25&&mm[k][j]!=1<<25)
mm[i][j] = mm[j][i] = min(mm[i][j], mm[i][k] + mm[k][j]);
ans = max(ans, mm[1][n]);
}
if (ans >= 1 << 25)
puts("Inf");
else printf("%d\n", ans);
}
}
I 简单智力题
当时的做法是倒序排序贪心 是最简单的
现在做一遍居然状态压缩啥的各种操作...
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int a[15], i, n;
double ans;
double f(int a, int b, int c)
{
double q = (a + b + c) / 2.0;
return sqrt(q*(q - a)*(q - b)*(q - c));
}
int cmp(int x, int y)
{
return x > y;
}
int main()
{
while (scanf("%d", &n) && n)
{
for (i = 0; i < n; i++)
scanf("%d", a + i);
sort(a, a + n, cmp), ans = 0;
for (i = 2; i < n;)
if (a[i] + a[i - 1] > a[i - 2])
ans += f(a[i], a[i - 1], a[i - 2]), i += 3;
else i++;
printf("%.2lf\n", ans);
}
}
手速铜牌题
D 被我很快理论ac但没模板就没写的题..
容易算出到ab2点距离比为k的范围是一个圆(高中数学) 然后套圆和多边形交的模板就好
有模板的话30min内应该可过的..
稳银牌题
之后是有点难的数学+数论题复杂数据结构题(玄学暴力可过)..