Submission #3268033


Source Code Expand

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

typedef unsigned long long int uint64;

typedef struct bitSetBy64bit{
  uint64 *a;
  int len;
  int n;
} bitSet;

const int bitSet_numOfBit=64;

bitSet* newBitSet(int n){
  bitSet *res=(bitSet *)malloc(sizeof(bitSet));
  res->a=(uint64 *)calloc((n+bitSet_numOfBit-1)/bitSet_numOfBit,sizeof(uint64));
  res->len=(n+bitSet_numOfBit-1)/bitSet_numOfBit;
  res->n=n;
  return res;
}

void freeBitSet(bitSet *b){
  free(b->a);
  free(b);
  return;
}

inline void fix(bitSet *b){
  if(b->n%bitSet_numOfBit!=0) b->a[b->len-1]&=(((uint64)1)<<(b->n%bitSet_numOfBit))-1;
}

void setBitSet(bitSet *b){
  const uint64 t=~((uint64)0);
  int i;
  for(i=0;i<b->len;i++) b->a[i]=t;
  fix(b);
  return;
}

void clearBitSet(bitSet *b){
  const uint64 t=0;
  int i;
  for(i=0;i<b->len;i++) b->a[i]=t;
  return;
}

void flipBitSet(bitSet *b){
  int i;
  for(i=0;i<b->len;i++) b->a[i]=~b->a[i];
  fix(b);
  return;
}

int getAtBitSet(bitSet *b,int index){
  assert(0<=index && index<b->n);
  return (b->a[index/bitSet_numOfBit]>>(index%bitSet_numOfBit))&0x01;
}

void setAtBitSet(bitSet *b,int index){
  assert(0<=index && index<b->n);
  uint64 t=b->a[index/bitSet_numOfBit];
  b->a[index/bitSet_numOfBit]=t|(((uint64)1)<<(index%bitSet_numOfBit));
  return;
}

void clearAtBitSet(bitSet *b,int index){
  assert(0<=index && index<b->n);
  uint64 t=b->a[index/bitSet_numOfBit];
  b->a[index/bitSet_numOfBit]=t&(~(((uint64)1)<<(index%bitSet_numOfBit)));
  return;
}

void flipAtBitSet(bitSet *b,int index){
  assert(0<=index && index<b->n);
  uint64 t=b->a[index/bitSet_numOfBit];
  b->a[index/bitSet_numOfBit]=t^(((uint64)1)<<(index%bitSet_numOfBit));
  return;
}

void assignBitSet(bitSet *x,const bitSet *a){
  int i;
  for(i=0;i<x->len;i++) x->a[i]=a->a[i];
  fix(x);
}

void orBitSet(bitSet *c,const bitSet *a,const bitSet *b){
  int i;
  for(i=0;i<c->len;i++) c->a[i]=a->a[i]|b->a[i];
  fix(c);
  return;
}

void andBitSet(bitSet *c,const bitSet *a,const bitSet *b){
  int i;
  for(i=0;i<c->len;i++) c->a[i]=a->a[i]&b->a[i];
  fix(c);
  return;
}

void xorBitSet(bitSet *c,const bitSet *a,const bitSet *b){
  int i;
  for(i=0;i<c->len;i++) c->a[i]=a->a[i]^b->a[i];
  fix(c);
  return;
}

//x!=a
void leftShiftBitSet(bitSet *x,const bitSet *a,const int c){
  assert(c>=0);
  clearBitSet(x);
  int p=c/bitSet_numOfBit;
  int q=c%bitSet_numOfBit;
  if(q==0){
    int i;
    for(i=0;i<x->len-p && i<a->len;i++){
      x->a[i+p]=a->a[i];
    }
  } else {
    int i;
    for(i=0;i<x->len-p-1 && i<a->len;i++){
      uint64 t=a->a[i];
      x->a[i+p]|=t<<q;
      x->a[i+p+1]|=t>>(bitSet_numOfBit-q);
    }
    if(i<a->len && i+p<x->len) x->a[i+p]|=a->a[i]<<q;
  }
  fix(x);
  return;
}

int cmp(const void *a,const void *b){
  return *(int *)a-*(int *)b;
}

void run(void){
  int n,k;
  scanf("%u%u",&n,&k);
  int *a=(int *)malloc(sizeof(int)*n);
  int i;
  for(i=0;i<n;i++) scanf("%d",a+i);
  qsort(a,n,sizeof(int),cmp);
  bitSet *now =newBitSet(k);
  bitSet *next=newBitSet(k);
  int l=-1;
  int r=n;
  while(r-l>1){
    int m=(l+r)/2;
    clearBitSet(now);
    setAtBitSet(now,0);
    for(i=0;i<n;i++){
      if(i==m) continue;
      const int aa=a[i];
      leftShiftBitSet(next,now,aa);
      orBitSet(next,next,now);
      bitSet *swap=now;
      now=next;
      next=swap;
    }
    for(i=k-1;getAtBitSet(now,i)==0;i--);
    if(a[m]+i>=k){
      r=m;
    } else {
      l=m;
    }
  }
  printf("%d\n",l+1);
}

int main(void){
  run();
  return 0;
}

Submission Info

Submission Time
Task D - No Need
User sansen
Language C (GCC 5.4.1)
Score 600
Code Size 3661 Byte
Status AC
Exec Time 19 ms
Memory 256 KB

Compile Error

./Main.c: In function ‘run’:
./Main.c:138:3: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%u%u",&n,&k);
   ^
./Main.c:141:20: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
   for(i=0;i<n;i++) scanf("%d",a+i);
                    ^

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 128 KB
0_001.txt AC 1 ms 128 KB
0_002.txt AC 1 ms 128 KB
1_003.txt AC 2 ms 256 KB
1_004.txt AC 1 ms 128 KB
1_005.txt AC 1 ms 128 KB
1_006.txt AC 1 ms 128 KB
1_007.txt AC 1 ms 128 KB
1_008.txt AC 1 ms 128 KB
1_009.txt AC 1 ms 128 KB
1_010.txt AC 1 ms 128 KB
1_011.txt AC 1 ms 128 KB
1_012.txt AC 1 ms 128 KB
1_013.txt AC 1 ms 128 KB
1_014.txt AC 1 ms 128 KB
1_015.txt AC 1 ms 128 KB
1_016.txt AC 1 ms 128 KB
1_017.txt AC 1 ms 128 KB
1_018.txt AC 1 ms 128 KB
1_019.txt AC 1 ms 128 KB
1_020.txt AC 1 ms 128 KB
1_021.txt AC 1 ms 128 KB
1_022.txt AC 1 ms 128 KB
1_023.txt AC 1 ms 128 KB
1_024.txt AC 1 ms 128 KB
1_025.txt AC 1 ms 128 KB
2_026.txt AC 1 ms 128 KB
2_027.txt AC 1 ms 128 KB
2_028.txt AC 1 ms 128 KB
2_029.txt AC 17 ms 252 KB
2_030.txt AC 19 ms 252 KB
2_031.txt AC 9 ms 252 KB
2_032.txt AC 2 ms 252 KB
2_033.txt AC 9 ms 252 KB
2_034.txt AC 2 ms 252 KB
2_035.txt AC 2 ms 252 KB
2_036.txt AC 13 ms 252 KB
2_037.txt AC 1 ms 128 KB
2_038.txt AC 1 ms 128 KB
2_039.txt AC 1 ms 128 KB
2_040.txt AC 9 ms 252 KB
2_041.txt AC 9 ms 252 KB
2_042.txt AC 12 ms 252 KB
2_043.txt AC 7 ms 252 KB
2_044.txt AC 9 ms 252 KB
2_045.txt AC 5 ms 252 KB
2_046.txt AC 9 ms 252 KB
2_047.txt AC 11 ms 252 KB
2_048.txt AC 13 ms 252 KB
2_049.txt AC 12 ms 252 KB
2_050.txt AC 12 ms 252 KB