Exemple #1
0
int main(int argc, char *argv[])
{
    setIO("sample");
    n = gi;
    if(n % 2 == 0){
          printf("NOT POSSIBLE\n");closeIO();return 0;
    }
    bool unique = true;
    scanf("%s",a+1);
    pow[0].v = 1;
    for(int i = 0;i<=n;++i)
     pow[i+1] = pow[i]*int65(p);
    for(int i = 1;i<=n;++i) pre[i] = (pre[i-1]*int65(p)+int65(a[i]));
    b[0] = pre[n/2];
    b[1] = (pre[n]-((pre[n/2+1])*(pow[n/2])));
    int ans = 0;
    if(b[0] ==b[1]){printf("%s",&a[n/2+2]); closeIO();return 0;}
    for(int i = 1;i<=n/2;++i)
     if(getnew(1,i-1)*pow[n/2-i+1]+getnew(i+1,n/2+1)==b[1])
      ans = ans? (unique = false):i;
    for(int i = n/2+2;i<=n;++i)
     if(getnew(n/2+1,i-1)*pow[n-i]+getnew(i+1,n) == b[0])
      ans = ans? (unique = false):i;
    if(unique){
     if(ans == 0)
      printf("NOT POSSIBLE");
     else if(ans <= n/2+1)
      printf("%s",&a[n/2+2]);
     else 
      for(int i = 1;i<=n/2;++i) printf("%c",a[i]);
     puts("");
    }
    else printf("NOT UNIQUE\n");
    closeIO();
    return EXIT_SUCCESS;
}
Exemple #2
0
/*
  inserts an element after a given element (prev_data)
  
    prev_data       content of the previous element
    data            content of the new element
    data_size       size of data
//*/
int insertelement(const char* prev_data, const unsigned int prev_data_size, const char* data, const unsigned int data_size)
{
  // checks
  if(NULL == data) return -1;

  // special case: if prev_data is null - prepend the new element
  if(NULL == prev_data){
    element_t* tmp = NULL;
    if(NULL == (tmp = getnew())){
      return -1;
    }
    if(0 != init(tmp, data, data_size)){
      return -1;
    }

    // relink - last is already set correctly
    tmp->next = first;
    first = tmp;

    // if tmp is the only element added, set last, too
    if(NULL == last){ 
      last = first; 
    }

    return 0;
  }

  // normal case: prev elements
  // TODO get prev

  // new element
  element_t* tmp = find(data, data_size);
  // TODO: what if no tmp was found

  // next element
  element_t* next = prev->next;
  // TODO, the next

  // relink elements
  tmp->next = next;
  prev->next = tmp;

  return 0;
}