Submission #25239792


Source Code Expand

#include <bits/stdc++.h>
#include <atcoder/modint>
#include <atcoder/convolution>
using namespace std;
using mint=atcoder::modint998244353;
using atcoder::convolution;

mint fac(int n){
    static vector<mint> cache{1};
    while(cache.size()<=n)
        cache.push_back(cache.back()*cache.size());
    return cache[n];
}

mint ifac(int n){
    static vector<mint> cache{1};
    while(cache.size()<=n)
        cache.push_back(cache.back()/cache.size());
    return cache[n];
}

mint binom(int n,int m){
    return fac(n)*ifac(m)*ifac(n-m);
}

int main(){
    int n;
    cin>>n;
    vector<int> col(n);
    for(int &x:col)cin>>x;
    sort(col.begin(),col.end());
    vector<int> cnt{1};
    for(int i=1;i<n;i++)
        if(col[i]!=col[i-1])
            cnt.push_back(1);
        else
            cnt.back()++;
    vector<vector<mint>> f,fd;
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq;
    for(int c:cnt){
        pq.push({c,f.size()});
        vector<mint> unit(c+1);
        for(int i=0;i<=c;i++)
            unit[i]=binom(c,i);
        f.push_back(unit);
        fd.push_back(unit);
        fd.back()[0]=0;
    }
    while(pq.size()>1){
        int i,sizei,j,sizej;
        tie(sizei,i)=pq.top();
        pq.pop();
        tie(sizej,j)=pq.top();
        pq.pop();
        vector<mint> f_new=convolution(f[i],f[j]),
                     fd_new=convolution(f[i],fd[j]),
                     fd_new_2=convolution(fd[i],f[j]);
        for(int i=0;i<f_new.size();i++)
            fd_new[i]+=fd_new_2[i];
        f[i]=f_new;
        fd[i]=fd_new;
        f[j]={};
        fd[j]={};
        pq.push({sizei+sizej,i});
    }
    int ians=pq.top().second;
    for(int i=1;i<f[ians].size();i++)
        cout<<(fd[ians][i]/f[ians][i]).val()<<'\n';
}

Submission Info

Submission Time
Task G - Colorful Candies 2
User cai_lw
Language C++ (GCC 9.2.1)
Score 600
Code Size 1845 Byte
Status AC
Exec Time 182 ms
Memory 14980 KiB

Compile Error

./Main.cpp: In function ‘mint fac(int)’:
./Main.cpp:10:23: warning: comparison of integer expressions of different signedness: ‘std::vector<atcoder::static_modint<998244353> >::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
   10 |     while(cache.size()<=n)
      |           ~~~~~~~~~~~~^~~
./Main.cpp: In function ‘mint ifac(int)’:
./Main.cpp:17:23: warning: comparison of integer expressions of different signedness: ‘std::vector<atcoder::static_modint<998244353> >::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
   17 |     while(cache.size()<=n)
      |           ~~~~~~~~~~~~^~~
./Main.cpp: In function ‘int main()’:
./Main.cpp:58:22: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<atcoder::static_modint<998244353> >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   58 |         for(int i=0;i<f_new.size();i++)
      |                     ~^~~~~~~~~~~~~
./Main.cpp:67:18: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<atcoder::static_modint<998244353> >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   67 |     for(int i=1;i<f[ians].size();i++)
      |                 ~^~~~~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 2
AC × 43
Set Name Test Cases
Sample example0.txt, example1.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, example0.txt, example1.txt
Case Name Status Exec Time Memory
000.txt AC 49 ms 4388 KiB
001.txt AC 43 ms 4552 KiB
002.txt AC 4 ms 3552 KiB
003.txt AC 179 ms 14964 KiB
004.txt AC 182 ms 14980 KiB
005.txt AC 174 ms 12728 KiB
006.txt AC 170 ms 12996 KiB
007.txt AC 150 ms 12040 KiB
008.txt AC 152 ms 12444 KiB
009.txt AC 149 ms 11380 KiB
010.txt AC 151 ms 11460 KiB
011.txt AC 135 ms 9500 KiB
012.txt AC 105 ms 7524 KiB
013.txt AC 82 ms 6636 KiB
014.txt AC 62 ms 5680 KiB
015.txt AC 106 ms 7912 KiB
016.txt AC 109 ms 7988 KiB
017.txt AC 109 ms 7980 KiB
018.txt AC 109 ms 7968 KiB
019.txt AC 109 ms 7792 KiB
020.txt AC 139 ms 9968 KiB
021.txt AC 118 ms 8384 KiB
022.txt AC 93 ms 7316 KiB
023.txt AC 68 ms 6032 KiB
024.txt AC 43 ms 4324 KiB
025.txt AC 51 ms 5500 KiB
026.txt AC 50 ms 5152 KiB
027.txt AC 52 ms 5696 KiB
028.txt AC 58 ms 5516 KiB
029.txt AC 60 ms 5548 KiB
030.txt AC 59 ms 5400 KiB
031.txt AC 59 ms 6764 KiB
032.txt AC 74 ms 7444 KiB
033.txt AC 118 ms 9504 KiB
034.txt AC 101 ms 8752 KiB
035.txt AC 29 ms 4468 KiB
036.txt AC 28 ms 4392 KiB
037.txt AC 75 ms 6640 KiB
038.txt AC 23 ms 4428 KiB
039.txt AC 123 ms 9516 KiB
040.txt AC 25 ms 4192 KiB
example0.txt AC 2 ms 3444 KiB
example1.txt AC 2 ms 3664 KiB