提出 #43196503
ソースコード 拡げる
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ldb double
template<typename T>void ckmn(T&a,T b){a=min(a,b);}
template<typename T>void ckmx(T&a,T b){a=max(a,b);}
void rd(int&x){scanf("%i",&x);}
void rd(ll&x){scanf("%lld",&x);}
void rd(char*x){scanf("%s",x);}
void rd(ldb&x){scanf("%lf",&x);}
void rd(string&x){scanf("%s",&x);}
template<typename T1,typename T2>void rd(pair<T1,T2>&x){rd(x.first);rd(x.second);}
template<typename T>void rd(vector<T>&x){for(T&i:x)rd(i);}
template<typename T,typename...A>void rd(T&x,A&...args){rd(x);rd(args...);}
template<typename T>void rd(){T x;rd(x);return x;}
int ri(){int x;rd(x);return x;}
template<typename T>vector<T> rv(int n){vector<T> x(n);rd(x);return x;}
template<typename T>void ra(T a[],int n,int st=1){for(int i=0;i<n;++i)rd(a[st+i]);}
template<typename T1,typename T2>void ra(T1 a[],T2 b[],int n,int st=1){for(int i=0;i<n;++i)rd(a[st+i]),rd(b[st+i]);}
template<typename T1,typename T2,typename T3>void ra(T1 a[],T2 b[],T3 c[],int n,int st=1){for(int i=0;i<n;++i)rd(a[st+i]),rd(b[st+i]),rd(c[st+i]);}
void re(vector<int> E[],int m,bool dir=0){for(int i=0,u,v;i<m;++i){rd(u,v);E[u].pb(v);if(!dir)E[v].pb(u);}}
template<typename T>void re(vector<pair<int,T>> E[],int m,bool dir=0){for(int i=0,u,v;i<m;++i){T w;rd(u,v,w);E[u].pb({v,w});if(!dir)E[v].pb({u,w});}}
const int mod=998244353;
int add(int a, int b){ a+=b;return a>=mod?a-mod:a;}
void ckadd(int &a, int b){ a=add(a,b);}
int sub(int a, int b){ a-=b;return a<0?a+mod:a;}
void cksub(int &a, int b){ a=sub(a,b);}
int mul(int a, int b){ return (ll)a*b%mod;}
void ckmul(int &a, int b){ a=mul(a,b);}
int powmod(int x, int k){ int ans=1;for(;k;k>>=1,ckmul(x,x)) if(k&1) ckmul(ans,x);return ans;}
int inv(int x){ return powmod(x,mod-2);}
const int M=10050;
int F[M],I[M];
int binom(int n, int k){
if(n<k||k<0)return 0;
return mul(F[n],mul(I[k],I[n-k]));
}
void calc()
{
F[0]=1;
for(int i=1;i<M;i++) F[i]=mul(F[i-1],i);
I[M-1]=inv(F[M-1]);
for(int i=M-2;~i;i--) I[i]=mul(I[i+1],i+1);
}
const int N=31;
int dp[N][N][N*N];
int main(){
calc();
int n,m;
rd(n,m);
dp[0][0][0]=1;
for(int i=1;i<=n;i++){
for(int c=0;c<=n;c++){
for(int j=0;j<=n*n;j++){
if(c>0 && j>=(i-c)){
ckadd(dp[i][c][j],dp[i-1][c-1][j-(i-c)]);
}
ckadd(dp[i][c][j],dp[i-1][c][j]);
}
}
}
int ans=mul(2,binom(n*(n-1)/2,m));
for(int c=1;c<n;c++){
for(int j=0;j<=n*n;j++){
if(dp[n][c][j]==0)continue;
int edges=c*(n-c);
//printf("c:%i j:%i dp:%i edges:%i\n",c,j,dp[n][c][j],edges);
int left=m-(edges-j);
if(left>=0){
ckadd(ans,mul(dp[n][c][j],binom(n*(n-1)/2-edges,left)));
}
//printf("left1:%i ans:%i\n",left,ans);
left=m-j;
if(left>=0){
ckadd(ans,mul(dp[n][c][j],binom(n*(n-1)/2-edges,left)));
}
//printf("left2:%i ans:%i\n",left,ans);
}
}
printf("%i\n",mul(ans,(mod+1)/2));
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
D - Sum of SCC |
| ユーザ |
TadijaSebez |
| 言語 |
C++ (GCC 9.2.1) |
| 得点 |
700 |
| コード長 |
3099 Byte |
| 結果 |
AC |
| 実行時間 |
13 ms |
| メモリ |
7340 KiB |
コンパイルエラー
./Main.cpp: In function ‘void rd(std::string&)’:
./Main.cpp:17:27: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘std::string*’ {aka ‘std::__cxx11::basic_string<char>*’} [-Wformat=]
17 | void rd(string&x){scanf("%s",&x);}
| ~^ ~~
| | |
| | std::string* {aka std::__cxx11::basic_string<char>*}
| char*
./Main.cpp: In function ‘void rd(int&)’:
./Main.cpp:13:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
13 | void rd(int&x){scanf("%i",&x);}
| ~~~~~^~~~~~~~~
./Main.cpp: In function ‘void rd(long long int&)’:
./Main.cpp:14:20: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
14 | void rd(ll&x){scanf("%lld",&x);}
| ~~~~~^~~~~~~~~~~
./Main.cpp: In function ‘void rd(char*)’:
./Main.cpp:15:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
15 | void rd(char*x){scanf("%s",x);}
| ~~~~~^~~~~~~~
./Main.cpp: In function ‘void rd(double&)’:
./Main.cpp:16:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
16 | void rd(ldb&x){scanf("%lf",&x);}
| ~~~~~^~~~~~~~~~
./Main.cpp: In function ‘void rd(std::string&)’:
./Main.cpp:17:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
17 | void rd(string&x){scanf("%s",&x);}
| ~~~~~^~~~~~~~~
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
700 / 700 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
example_00.txt, example_01.txt, example_02.txt |
| All |
example_00.txt, example_01.txt, example_02.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| example_00.txt |
AC |
10 ms |
3700 KiB |
| example_01.txt |
AC |
2 ms |
3936 KiB |
| example_02.txt |
AC |
8 ms |
6288 KiB |
| test_00.txt |
AC |
2 ms |
3616 KiB |
| test_01.txt |
AC |
2 ms |
3632 KiB |
| test_02.txt |
AC |
2 ms |
3804 KiB |
| test_03.txt |
AC |
10 ms |
7148 KiB |
| test_04.txt |
AC |
10 ms |
6844 KiB |
| test_05.txt |
AC |
4 ms |
4408 KiB |
| test_06.txt |
AC |
3 ms |
4692 KiB |
| test_07.txt |
AC |
8 ms |
7260 KiB |
| test_08.txt |
AC |
8 ms |
7148 KiB |
| test_09.txt |
AC |
12 ms |
7340 KiB |
| test_10.txt |
AC |
9 ms |
7172 KiB |
| test_11.txt |
AC |
9 ms |
7276 KiB |
| test_12.txt |
AC |
8 ms |
7096 KiB |
| test_13.txt |
AC |
9 ms |
7268 KiB |
| test_14.txt |
AC |
11 ms |
7264 KiB |
| test_15.txt |
AC |
11 ms |
7148 KiB |
| test_16.txt |
AC |
8 ms |
7096 KiB |
| test_17.txt |
AC |
10 ms |
6284 KiB |
| test_18.txt |
AC |
13 ms |
6624 KiB |
| test_19.txt |
AC |
9 ms |
6212 KiB |
| test_20.txt |
AC |
8 ms |
7288 KiB |
| test_21.txt |
AC |
8 ms |
6920 KiB |
| test_22.txt |
AC |
9 ms |
6924 KiB |