提出 #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
結果
AC × 3
AC × 26
セット名 テストケース
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