2020 年 8 月水题选做

这么快就 8 月了呢…

8/1

CF875F\color{green}{\text{CF875F}}

又一道想出结论之后就非常简单的题。

考虑把王子当成点,公主当成边,然后就求个最大生成基环树就好了。

求法魔改一下 Kruskal 就完事了。

8/2

打了人生第一场 atcoder 。

ABC 174

T1

sb 题。

1
2
3
4
int x;
scanf("%d",&x);
if(x>=30)puts("Yes");
else puts("No");

T2

sb 题。

1
2
3
4
5
6
7
8
scanf("%d%d",&n,&d);
rep(i,1,n) {
int x,y;
scanf("%d%d",&x,&y);
double k=sqrt(1.0*x*x+1.0*y*y);
if(k<=d)++ans;
}
printf("%d\n",ans);

T3

考虑模数周期性,然后这就是道 sb 题了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
scanf("%d",&k);
if(k%2==0) puts("-1");
else {
mo=7%k;
used[mo]=1;bool flg=0;
while(mo!=0) {
++ans;
mo*=10;mo+=7;
mo%=k;
if(used[mo]) {flg=1;printf("-1\n");break;}
used[mo]=1;
}
if(!flg)printf("%d\n",ans+1);
}

T4

考虑贪心。把所有的 R 移到它该移的位置(前面)即可。根本用不上改变颜色的操作。

1
2
3
4
5
6
7
8
9
scanf("%d%s",&n,s+1);
rep(i,1,n) {
if(s[i]=='R') ++r;
}
k=r;
rep(i,1,r) {
if(s[i]=='R') --k;
}
printf("%d\n",k);

T5

二分。二分完了 check 随便写写。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool check(int x) {
int now=0;
rep(i,1,n) {
int kk=a[i]/x;
if(a[i]%x==0) kk--;
now+=kk;
if(now>k) return false;
}
return true;
}
signed main(){
scanf("%lld%lld",&n,&k);
rep(i,1,n) scanf("%lld",&a[i]),mx=max(mx,a[i]);
int l=1,r=mx;
while(l<r) {
int mid=(l+r)>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
printf("%lld\n",r);
return 0;
}

T6

HH 的项链。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
scanf("%d%d",&n,&m);
rep(i,1,n) scanf("%d",&a[i]);
rep(i,1,m) asks[i].id=i,scanf("%d%d",&asks[i].l,&asks[i].r);
sort(asks+1,asks+m+1,cmp);
int now=1;
rep(i,1,m) {
rep(j,now,asks[i].r) {
if(used[a[j]]) modify(used[a[j]],-1);
modify(j,1);
used[a[j]]=j;
}
ans[asks[i].id]=query(asks[i].r)-query(asks[i].l-1);
now=asks[i].r+1;
}
rep(i,1,m) printf("%d\n",ans[i]);

切题顺序:A-B-D-E-F-C

就这样愉快地 AK 了。

8/3

CF165D\color{green}{\text{CF165D}}

树剖裸题,只是因为有点忘记树剖怎么写了来练练手而已。

8/5

晚上 CF 爆炸了。。。

8/6

愉快的叉了几个同学昨天 CF 的 C 题。

P3950\color{green}{\text{P3950}}

裸树剖题,很久以前写了但一直没调出来,今天调出来了。

原来是在跳重链的时候出了点锅。

8/7

P2787\color{red}{\text{P2787}}

开 26 棵线段树即可,但是不知道哪里写炸了全 WA。。。

另外,这题本来我想用珂朵莉树水的,结果发现它卡珂朵莉树。。。

8/8

P2837\color{green}{\text{P2837}}

不要说我做水题,是老师布置的

简单的线性 dp,设 fi,0f_{i,0} 表示前 ii 头奶牛,第 ii 头奶牛是 11 时需要改的最小数量, fi,1f_{i,1} 则反之。

8/9

P2642\color{green}{\text{P2642}}

预处理一下前缀的最大子段和、后缀的最大子段和,然后枚举断点统计一下答案即可。

P1982\color{green}{\text{P1982}}

人生苦短,我用 python

按照题意求一下前缀最大子段和,然后模拟一下。

但是会爆 long long,于是我们用 python 高精就能解决这道题目。

P1043\color{green}{\text{P1043}}

简单区间 dp。

断环成链,设 fi,j,kf_{i,j,k} 表示从第 ii 位到第 jj 位,分 kk 段得到的最大值。

然后设 gi,j,kg_{i,j,k} 表示从第 ii 位到第 jj 位,分 kk 段得到的最小值。

随便转移转移就好了。

Codeforces Round 663 (Div. 2)

今天打了场 CF。

CF1391A\color{green}{\text{CF1391A}}

发现 1n1\sim n 即是合法的序列,直接输出即可。

CF1391B\color{green}{\text{CF1391B}}

找到右侧的 R 与下侧的 D,统计一下。

CF1391C\color{green}{\text{CF1391C}}

OEIS nb!

手玩一下,然后在 OEIS 上查 0,0,2,6 即可(

然后发现答案是 n!2n1n!-2^{n-1}

8/10

P5662\color{green}{\text{P5662}}

哈哈哈我发现我居然还没把去年 PJ AK掉。

大水题,对于每天都与后一天做差跑个完全背包就好了。

P2871\color{green}{\text{P2871}}

背包裸题。

P1164\color{green}{\text{P1164}}

背包裸题。

P2639\color{green}{\text{P2639}}

背包裸题。话说老师为啥留这么多裸题

P1802\color{green}{\text{P1802}}

还是背包裸题。。。

P1877\color{green}{\text{P1877}}

bool 数组的背包 dp。

P1510\color{green}{\text{P1510}}

还是背包裸题。。

P1504\color{green}{\text{P1504}}

用背包看看哪些高度所有的城堡都能达到,然后取个最高的。