【星航计划】2024.11 Div. 4 题解
2024 -- 星航计划 --十一月份 -- 基础语法
场切:ABC
不会:D
-
A.孤岛
简单模拟。
-
B.魔法
\(k \le 90 \ \ a,b,c \le 10^9\) 用
long long
会爆。转为__int128
。 -
C.质数和合数
暴力从小到大枚举每个数,判断是否合法。
-
D.士气
做法: 可以证明所有原 \(w(i)\) 相同的士兵肯定会一起删除,因为如果删去士兵 \(i\) ,可能影响的其他士兵有两种可能 \(w(i)=w(j)\) 或 \(w(i)<w(j)\),后者不会影响到,因为 \(j\) 一定有比 \(i\) 重复士兵数量更多的另一维,因此利用桶对所有士兵求出 \(w(i)\),然后求出一个前缀和即可。
点击查看代码
#include <bits/stdc++.h> using namespace std; const int N=1e6+7; int n,s[N],f[N][3],g[N][3],ans[N]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=0;j<=2;j++) scanf("%d",&f[i][j]),g[f[i][j]][j]++; for(int i=1;i<=n;i++) for(int j=0;j<=2;j++) s[i]=max(s[i],g[f[i][j]][j]); for(int i=1;i<=n;i++) ans[s[i]+1]++; for(int i=1;i<=n;i++) ans[i]+=ans[i-1]; for(int i=1;i<=n;i++) printf("%d ",ans[i]); return 0; }