答案:3880
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int a = 10000, ans = 0;
while(true)
{
if((ans / 60) & 1) a += 5;
else a -= 10;
ans++;
if(a == 0) break;
}
printf("%d\n", ans);
return 0;
}
答案:52038720
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int leap(int x)
{
if((x % 4 == 0 && x % 100 != 0) || x % 400 == 0) return 366;
return 365;
}
int main()
{
int ans = 344;
for(int i = 1922; i <= 2019; i++) ans += leap(i);
printf("%d\n", ans * 24 * 60);
return 0;
}
思路:感染率大概是 1%,呈均匀分布,意味着每 100 100 100 人中有 1 1 1 人感染。枚举 k k k,找到在最坏情况下使用最少试剂盒的那个 k k k。
如果 100 % k = = 0 100 \% k == 0 100%k==0,则恰好可以分为 100 k \frac{100}{k} k100 组,共需要 100 k − 1 + k + 1 \frac{100}{k} - 1 + k + 1 k100−1+k+1 个试剂盒。
如果 100 % k ! = 0 100 \% k != 0 100%k!=0,则可以分为 100 k \frac{100}{k} k100 组,还剩 r ( r < k ) r\ (r < k) r (r<k) 人,最坏情况下共需要 100 k + k + 1 \frac{100}{k} + k + 1 k100+k+1 个试剂盒。
答案:10
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int minn = 1e9, mink = 1e9, t;
for(int k = 1; k <= 100; k++)
{
if(100 % k == 0) t = 100 / k + k;
else t = 100 / k + k + 1;
if(t < minn)
{
minn = t;
mink = k;
}
}
printf("%d\n", mink);
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 10010;
int f[N];
int d[N], v[N];
int find(int x)
{
if(f[x] != x)
{
int t = find(f[x]);
d[x] += d[f[x]];
f[x] = t;
}
return f[x];
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) f[i] = i;
while(m--)
{
int op, a, b;
scanf("%d%d%d", &op, &a, &b);
if(op == 1)
{
int fa = find(a), fb = find(b);
if(fa != fb)
{
f[fa] = fb;
d[fa] += v[fa] - v[fb];
}
}
else if(op == 2)
{
int fa = find(a);
v[fa] += b;
}
}
for(int i = 1; i <= n; i++) printf("%d ", v[find(i)] + d[i]);
return 0;
}