【星航计划】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;
    }
    
posted @ 2024-11-03 12:02  Star_F  阅读(87)  评论(0)    收藏  举报