Submission #1338912


Source Code Expand

#pragma region include
#include <iostream>
#include <iomanip>
#include <stdio.h>

#include <sstream>
#include <algorithm>
#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)
/////////
#pragma region typedef
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
#pragma endregion //typedef
////定数
const int INF = (int)1e9;
const LL MOD = (LL)1e9+7;
const LL LINF = (LL)1e18;
const double PI = acos(-1.0);
const double EPS = 1e-9;
/////////
using namespace::std;

void solve(){
	int N,K;
	cin >> N >> K;
	vector<int> A(N);
	for(int i=0;i<N;++i){
		cin >> A[i];
	}
	sort(A.begin(), A.end());
	const int index = lower_bound(A.begin(),A.end(),K) -A.begin();
	vector< vector<bool> > Left(N+1,vector<bool>(K+1,false));
	vector< vector<bool> > Right(N+1,vector<bool>(K+1,false));
	Left[0][0] = true;
	for(int i=0;i<index;++i){
		Left[i+1] = Left[i];
		for(int v=K;v>=0;--v){
			if( v-A[i] >= 0 ){
				(Left[i+1][v]) = (Left[i+1][v])|(Left[i][v-A[i]]);
			}
		}
	}
	Right[0][0] = true;
	for(int i=0;i<index;++i){
		int Aindex = index-1-i;
		Right[i+1] = Right[i];
		for(int v=K;v>=0;--v){
			if( v-A[Aindex] >= 0 ){
				(Right[i+1][v]) = (Right[i+1][v])|(Right[i][v-A[Aindex]]);
			}
		}
	}
	/*
	index個の数列
	Ai(0index)を使わない場合i[0,index)
	Left[i][*]+Right[index-1-i][*]
	*/
	int L,R,mid;
	LL sum = 0;
	for(int i=0;i<index;++i){
		sum += A[i];
	}
	if( sum < K ){
		cout << index << endl;
		return;
	}else{
		R = index;
	}
	L = -1;
	while(R-L>1){//二分探索
		mid = (L+R)/2;//A[mid]を使わない
		bool flag = false;
		for(int ter=K-A[mid];ter<K;++ter){//作る数
			for(int v=0;v<=ter;++v){//v:左で作る,ter-v:右で作る
				if( Left[mid][v] && Right[index-1-mid][ter-v]){
					flag = true;
					break;
				}
			}
			if( flag ) break;
		}
		if( flag ){
			R = mid;
		}else{
			L = mid;
		}
	}
	cout << R << 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 D - No Need
User akarin55
Language C++14 (GCC 5.4.1)
Score 600
Code Size 2619 Byte
Status AC
Exec Time 120 ms
Memory 6912 KB

Judge Result

Set Name Sample Subtask All
Score / Max Score 0 / 0 300 / 300 300 / 300
Status
AC × 3
AC × 26
AC × 51
Set Name Test Cases
Sample 0_000.txt, 0_001.txt, 0_002.txt
Subtask 0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt, 1_023.txt, 1_024.txt, 1_025.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt, 1_023.txt, 1_024.txt, 1_025.txt, 2_026.txt, 2_027.txt, 2_028.txt, 2_029.txt, 2_030.txt, 2_031.txt, 2_032.txt, 2_033.txt, 2_034.txt, 2_035.txt, 2_036.txt, 2_037.txt, 2_038.txt, 2_039.txt, 2_040.txt, 2_041.txt, 2_042.txt, 2_043.txt, 2_044.txt, 2_045.txt, 2_046.txt, 2_047.txt, 2_048.txt, 2_049.txt, 2_050.txt
Case Name Status Exec Time Memory
0_000.txt AC 1 ms 256 KB
0_001.txt AC 1 ms 256 KB
0_002.txt AC 1 ms 256 KB
1_003.txt AC 1 ms 256 KB
1_004.txt AC 1 ms 256 KB
1_005.txt AC 1 ms 256 KB
1_006.txt AC 1 ms 256 KB
1_007.txt AC 1 ms 256 KB
1_008.txt AC 2 ms 384 KB
1_009.txt AC 2 ms 384 KB
1_010.txt AC 1 ms 384 KB
1_011.txt AC 1 ms 384 KB
1_012.txt AC 1 ms 384 KB
1_013.txt AC 1 ms 384 KB
1_014.txt AC 1 ms 384 KB
1_015.txt AC 2 ms 384 KB
1_016.txt AC 1 ms 256 KB
1_017.txt AC 1 ms 256 KB
1_018.txt AC 1 ms 256 KB
1_019.txt AC 1 ms 384 KB
1_020.txt AC 1 ms 256 KB
1_021.txt AC 2 ms 384 KB
1_022.txt AC 1 ms 256 KB
1_023.txt AC 1 ms 256 KB
1_024.txt AC 2 ms 384 KB
1_025.txt AC 2 ms 384 KB
2_026.txt AC 1 ms 256 KB
2_027.txt AC 1 ms 256 KB
2_028.txt AC 1 ms 256 KB
2_029.txt AC 120 ms 6912 KB
2_030.txt AC 120 ms 6912 KB
2_031.txt AC 5 ms 6912 KB
2_032.txt AC 3 ms 1024 KB
2_033.txt AC 5 ms 6912 KB
2_034.txt AC 2 ms 1024 KB
2_035.txt AC 3 ms 1024 KB
2_036.txt AC 80 ms 6912 KB
2_037.txt AC 1 ms 256 KB
2_038.txt AC 1 ms 256 KB
2_039.txt AC 1 ms 256 KB
2_040.txt AC 5 ms 5888 KB
2_041.txt AC 48 ms 3968 KB
2_042.txt AC 72 ms 5632 KB
2_043.txt AC 35 ms 3584 KB
2_044.txt AC 40 ms 3968 KB
2_045.txt AC 21 ms 2432 KB
2_046.txt AC 34 ms 3840 KB
2_047.txt AC 49 ms 5504 KB
2_048.txt AC 62 ms 6784 KB
2_049.txt AC 50 ms 6784 KB
2_050.txt AC 43 ms 6784 KB