这里写目录标题
A:班委竞选题目:分析:AC代码:
B:广告投放题目:分析:AC代码:
C:我得重新集结部队题目:分析:AC代码:
D:园艺大师题目:分析:AC代码:
E:发通知题目:分析:AC代码:
F:旅游胜地题目:分析:AC代码:
G:vvvvvvvim题目:分析:AC代码:
H:林克与翻转排列题目:分析:AC代码:
I:太阳轰炸题目:分析:AC代码:
J:二进制与、平方和题目:分析:AC代码:
K:子串翻转回文串题目:分析:AC代码:
L:送外卖题目:分析:AC代码:
榜单:
A:班委竞选
时间限制: 1 Sec 内存限制: 128 MB
题目:
某班级中有 n 位学生,学号为 1,2,…,n。现在班级中正在举行 m 个班干部职位的竞选,职位用 1,2,…,m 编号。学号为 i 的同学竞选的职位为 ci,获得 ti 票。最终每个职位选择票数最高的同学上任,若存在多个同学票数一致,则选择学号最小的同学上任。 现在给你唱票结果,请你告诉班主任最终的班干部名单。
输入 第一行包含两个整数 n, m (1≤n≤51, 1≤m≤12, m≤n),含义见题目描述。 接下来 n 行,第 i 行包含两个整数 ci, ti (1≤ci≤m, 1≤ti≤n),含义见题目描述。 数据保证每个职位至少有一位同学参与竞选。
输出 输出一行,包含 m 个整数。第 i 个整数表示担任第 i 个班干部职位的同学学号。
样例输入 Copy 5 2 1 2 2 1 2 1 1 1 2 2 样例输出 Copy 1 5 提示 样例输入二 12 8 8 12 6 8 2 6 1 8 1 7 2 9 3 12 4 9 5 1 6 12 7 6 8 8 样例输出二 4 6 7 8 9 10 11 1
第一个样例中,第 1 个岗位有学号 1 和学号 4 两个同学竞选,获得的票数分别为 2 和 1,第 1 个岗位由获得票数最多的学号 1 同学来担任;第 2 个岗位有学号 2, 3 和 5 三个同学竞选,获得的票数分别为 1, 1 和 2,第 2 个岗位由获得票数最多的学号 5 同学来担任。
分析:
原文链接.
AC代码:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201124220455282.png#pic_center)
#include
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const int N = 5e5 + 10;
struct node
{
int p, id;
bool operator
#ifdef LOCAL
freopen("E:/input.txt", "r", stdin);
#endif
mapmp;
int n, m;
cin >> n >> m;
for (int i = 1; i t, i });
}
for (int i = 1; i
if (vis[i])
{
for (int j = 1; j
int x, y;
ll r;
bool death;
}insect[N];
int type[N];
ll dis(int a, int b, int c, int d)
{
return 1LL * (a - c) * (a - c) + 1LL * (b - d) * (b - d);
}
int main()
{
#ifdef LOCAL
freopen("E:/input.txt", "r", stdin);
#endif
int n;
int cnt = 0, tot = 0;
cin >> n;
while (n--)
{
++cnt;
int op;
scanf("%d", &op);
if (op == 1)
scanf("%d%d%lld", &insect[cnt].x, &insect[cnt].y, &insect[cnt].r), type[cnt] = 1;
else
{
type[cnt] = 2;
int x, y, atk, r;
scanf("%d%d%d%d", &x, &y, &atk, &r);
int k = 0;
ll d = 1e18;
for (int i = 1; i
if (d > dis(x, y, insect[i].x, insect[i].y))
d = dis(x, y, insect[i].x, insect[i].y), k = i;
}
}
for (int i = 1; i
insect[i].r -= 3LL * atk;
if (insect[i].r
scanf("%d%d%d", &a[i], &b[i], &c[i]);
v.push_back(a[i]), v.push_back(b[i] + 1);
}
sort(v.begin(), v.end());
int cnt = v.erase(unique(v.begin(), v.end()), v.end()) - v.begin();
for (int i = 1; i
d[i] ^= d[i - 1];
e[i] += e[i - 1];
if (e[i] >= k)
ans = max(ans, d[i]);
}
cout if (b & 1) res = res * a % mod; a = a * a % mod; } return res; }
int jc[N], inv[N];
int fz1[N], fz2[N];
int main()
{
#ifdef LOCAL
freopen("E:/input.txt", "r", stdin);
#endif
jc[0] = 1;
for (int i = 1; i = 0; i--)
inv[i] = 1LL * inv[i + 1] * (i + 1) % mod;
ll n, r1, r2, r, a, h;
cin >> n >> r1 >> r2 >> r >> a >> h;
ll fm = 1, x1 = r2 * r2 % mod, x2 = (r1 + r) * (r1 + r) % mod, x3 = (x1 - x2 + mod) % mod;
fz1[0] = fz2[0] = 1;
for (int i = 1; i
if (i * a >= h)
{
flag = 1;
ll f = 1LL * jc[n] * inv[i] % mod * inv[n - i] % mod;
res = (res + 1LL * f * fz1[i] % mod * fz2[n - i] % mod) % mod;
}
}
if ((r1 + r) >= r2)
{
printf("%d\n", flag);
exit(0);
}
cout
h[0] = 0, w[0] = 1, base = b, mod = m;
}
void Add(char* s)
{
int len = strlen(s + 1);
for (int i = 1; i
for (int i = 1; i
if (ha1.Get(1, i) == ha1.Get(n - i + 1, n))
{
if (ha1.Get(i + 1, n - i) == ha2.Get(i + 1, n - i))
return 1;
}
}
else
{
int len = n - i;
if (ha1.Get(n - 2 * len + 1, n - len) == ha1.Get(n - len + 1, n))
{
if (ha1.Get(1, n - 2 * len) == ha2.Get(2 * len + 1, n))
return 1;
}
}
}
return 0;
}
int main()
{
#ifdef LOCAL
freopen("E:/input.txt", "r", stdin);
#endif
ha1.Init(233, 1e9 + 9);
ha2.Init(233, 1e9 + 9);
int T;
cin >> T;
while (T--)
{
scanf("%s", t + 1);
int len = strlen(t + 1);
n = 0;
for (int i = 1; i
for (int j = i; j
ha1.Add(s);
reverse(s + 1, s + n + 1);
ha2.Add(s);
ans = check();
}
puts(ans ? "Yes" : "No");
}
return 0;
}
L:送外卖
题目:
时间限制: 8 Sec 内存限制: 512 MB
题目描述 在智慧岛上,程序员小 Q 每天下班都会在 n 栋公寓之间兼职送外卖。这 n 栋公寓由 m 条双向道路连通,任意两栋公寓可通过这些道路相互到达。第 i 条道路连接公寓 ui,vi,长度为 wi 米。 精通解梦的小 Q 早已在昨夜梦中知晓今日的所有订单信息:今晚,每栋公寓都恰好订了一份外卖,公寓 i 在 qi 秒下单。小 Q 下班后会从 1 公寓骑上他的小电驴,从 0 秒开始送餐。小 Q 可以以不超过 1 m/s的速度沿道路移动,也可以在任意位置休息不动,到达公寓后的送餐时间可以忽略不计。当然,小 Q 不能在下单前将外卖送达,以免引起客户的恐慌。 对于一笔订单,小Q在订单发起后的不同时间送达将会产生不同收益。形式化地说,对一笔订单 j,外卖平台会规定 d 个送达时间节点 qj |