AtCoder ABC 163 题解(难题日常咕咕咕

Posted tlx-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoder ABC 163 题解(难题日常咕咕咕相关的知识,希望对你有一定的参考价值。

第一场 AtCoder 比赛,结果你告诉我是 unrated?
看来只能做人均会的题了。
总分:(100+200+300+400+0(AC×5)+0=1000)
写一下简要题解:
按我 (A) 题顺序来。
(网太卡了,把题全打开,谁先加载出来先搞谁

(C).

给一棵以 (1) 为根的树,并给出其它点的父亲,求每个点有几个儿子。
直接开个数组记录就好了:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;

#define read(x) scanf("%d",&x)
#define readl(x) scanf("%lld",&x)
#define ll long long 
#define ull unsigned long long

int n,l;
int b[200005]={0};

int main()
{
	read(n);
	for(int i=2;i<=n;i++) read(l),b[l]++;
	for(int i=1;i<=n;i++) printf("%d
",b[i]);
	return 0;
} 

然后 (CE) 只因选错语言,还 (CE) 了两次,罚时 (10;min) 亏死了。

(A).

给出圆的半径,求圆的直径。

[C=2pi r ]

依稀记得 (FFT)(pi=acos(-1)),直接算就行了。
不卡精度真是太好了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;

#define read(x) scanf("%d",&x)
#define readl(x) scanf("%lld",&x)
#define ll long long 
#define ull unsigned long long

double pi=acos(-1.0);
double n; 

int main()
{
	cin>>n;
	printf("%.20lf
",2*n*pi); 
	return 0;
} 

(B).

有一些工作需要的时间和拥有来办公的总时间,求做完工作后剩多少时间,若做不完,输出 (-1)
前缀和,注意long long

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;

#define read(x) scanf("%d",&x)
#define readl(x) scanf("%lld",&x)
#define ll long long 
#define ull unsigned long long

int n,m;
int b[10005];
ll sum=0;

int main()
{
	read(n),read(m);
	for(int i=1;i<=m;i++) read(b[i]),sum+=b[i];
	if(sum>n) printf("%d
",-1);
	else printf("%d
",n-sum);
	return 0;
} 

(D)

(10^{100},10^{100}+1......10^{100}+N) 中选 (k)(N+1) 个数,求可以得到值数的和。
稍有思维难度,但还是一眼题。
发现得到的数都是连续的,直接求最大值和最小值相减即可,选不同个的最值显然是可以前、后缀和优化递推的。
复杂度 (mathcal O(n-k))

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;

#define read(x) scanf("%d",&x)
#define readl(x) scanf("%lld",&x)
#define ll long long 
#define ull unsigned long long
#define MOD 1000000007

int n,m;
ll q[200005],h[200005];
ll sum=0;

int main()
{
	read(n),read(m);
	q[0]=0,h[n+1]=0;
	for(int i=1;i<=n;i++) q[i]=q[i-1]+1ll*i;
	for(int i=n;i>=1;i--) h[i]=h[i+1]+1ll*i;
	for(int i=m;i<=n;i++) sum=(sum+h[n-i+1]-q[i-1]+1)%MOD;
	printf("%lld
",(sum+1)%MOD);
	return 0;
} 

(E).

贪心 (+dp) 日常咕咕咕,看懂正解代码(没有题解/dk)再说,无论是贪心还是假的 (dp) 都能对 (5/26)
丢人选手。

(F).

树形 (dp) 一眼就弃了,不知道以后能不能补上。
最后得了 (1000;pts+39.10;min;;;rk1654)
太菜了,没人权, (dp) 功夫需要继续加强。
要是没有选错语言就能 (rk1081) 了。(然而没有切出 (E) 题才是原罪。

以上是关于AtCoder ABC 163 题解(难题日常咕咕咕的主要内容,如果未能解决你的问题,请参考以下文章

AtCoder Grand Contest 006 题解

AtCoder Grand Contest 020 题解

AtCoder Grand Contest 007题解

题解Atcoder ABC295 A-G

AtCoder Grand Contest 019 题解

题解 [Atcoder ABC 161] A,B,C