Submission #1604935
Source Code Expand
#pragma region include #include <iostream> #include <iomanip> #include <stdio.h> #include <sstream> #include <algorithm> #include <iterator> #include <cmath> #include <complex> #include <string> #include <cstring> #include <vector> #include <tuple> #include <bitset> #include <queue> #include <complex> #include <set> #include <map> #include <stack> #include <list> #include <fstream> #include <random> //#include <time.h> #include <ctime> #pragma endregion //#include ///////// #define REP(i, x, n) for(int i = x; i < n; ++i) #define rep(i,n) REP(i,0,n) #define ALL(X) X.begin(), X.end() ///////// #pragma region typedef typedef long long LL; typedef long double LD; typedef unsigned long long ULL; typedef std::pair<LL,LL> PLL;// typedef std::pair<int,int> PII;// #pragma endregion //typedef ////定数 const int INF = (int)1e9; const LL MOD = (LL)1e9+7; const LL LINF = (LL)1e18+20; const LD PI = acos(-1.0); const double EPS = 1e-9; ///////// using namespace::std; template<class T> inline void MaxTo(T& A,T& B){if( A < B ){A=B;}} template<class T> inline void MinTo(T& A,T& B){if( A > B ){A=B;}} template<class T> inline void AddTo(T& A,T& B){A+=B;} inline void AddToMod(LL& A,LL& B){ if( A < 0 ){ A = 0; } A += B; if( A > MOD ){ A -= MOD; } } void solve(){ string str; LL D; cin >> str >> D; int size = str.size(); vector< vector<LL> > dp(size+1,vector<LL>(D+1,-1)); dp[0][0] = 1; for(int i=1;i<=size;++i){ LL val = 0; LL mul = 1; for(int j=i-1;j>=0;--j){ val += (str[j]-'0')*mul;//今回切り取った値 mul *= 10; if( val > D ){ break; } for(int k=0;k<=D;++k){ if( dp[j][k] < 0 ){continue;} if( k+val > D ){continue;} AddToMod(dp[i][k+val],dp[j][k]); } } } LL ans = 0; for(int k=0;k<=D;++k){ if( dp[size][k] >= 0 ){ AddToMod(ans,dp[size][k]); } } cout << ans << endl; } #pragma region main signed main(void){ std::cin.tie(0); std::ios::sync_with_stdio(false); std::cout << std::fixed;//小数を10進数表示 cout << setprecision(16);//小数点以下の桁数を指定//coutとcerrで別 solve(); } #pragma endregion //main()
Submission Info
Submission Time | |
---|---|
Task | C - 何通りの分割方法がある? |
User | akarin55 |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 2230 Byte |
Status | AC |
Exec Time | 80 ms |
Memory | 66304 KB |
Judge Result
Set Name | Sample | Subtask1 | Subtask2 | Subtask3 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 10 / 10 | 30 / 30 | 60 / 60 | ||||||||
Status |
|
|
|
|
Set Name | Test Cases |
---|---|
Sample | sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt |
Subtask1 | sub1_1.txt, sub1_2.txt, sub1_3.txt, sub1_4.txt |
Subtask2 | sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt, sub2_1.txt, sub2_2.txt, sub2_3.txt, sub2_4.txt, sub2_5.txt, sub2_6.txt, sub2_7.txt |
Subtask3 | sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt, sub1_1.txt, sub1_2.txt, sub1_3.txt, sub1_4.txt, sub2_1.txt, sub2_2.txt, sub2_3.txt, sub2_4.txt, sub2_5.txt, sub2_6.txt, sub2_7.txt, sub3_1.txt, sub3_2.txt, sub3_3.txt, sub3_4.txt, sub3_5.txt, sub3_6.txt, sub3_7.txt, sub3_8.txt, sub3_9.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
sample_1.txt | AC | 3 ms | 384 KB |
sample_2.txt | AC | 1 ms | 256 KB |
sample_3.txt | AC | 1 ms | 256 KB |
sample_4.txt | AC | 2 ms | 896 KB |
sub1_1.txt | AC | 1 ms | 256 KB |
sub1_2.txt | AC | 1 ms | 256 KB |
sub1_3.txt | AC | 1 ms | 256 KB |
sub1_4.txt | AC | 1 ms | 256 KB |
sub2_1.txt | AC | 1 ms | 256 KB |
sub2_2.txt | AC | 1 ms | 256 KB |
sub2_3.txt | AC | 2 ms | 768 KB |
sub2_4.txt | AC | 1 ms | 384 KB |
sub2_5.txt | AC | 4 ms | 4224 KB |
sub2_6.txt | AC | 7 ms | 8448 KB |
sub2_7.txt | AC | 7 ms | 7552 KB |
sub3_1.txt | AC | 1 ms | 256 KB |
sub3_2.txt | AC | 1 ms | 256 KB |
sub3_3.txt | AC | 1 ms | 512 KB |
sub3_4.txt | AC | 1 ms | 256 KB |
sub3_5.txt | AC | 55 ms | 46336 KB |
sub3_6.txt | AC | 80 ms | 66304 KB |
sub3_7.txt | AC | 58 ms | 49664 KB |
sub3_8.txt | AC | 20 ms | 17408 KB |
sub3_9.txt | AC | 52 ms | 44672 KB |