Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Ones/송지원: Difference between revisions

From ZeroWiki
imported>enochbible
No edit summary
(Repair batch-0003 pages from live compare)
 
Line 16: Line 16:


== Status ==
== Status ==
{| class="wikitable"
{| class="wikitable" style="width:100%;"
|-
|-
| Run ID
| Run ID
Line 54: Line 54:
  typedef struct longint {
  typedef struct longint {
  int length;
  int length;
  int digits[ARRBOUND]; // 0000~9999
  int digits[ARRBOUND]; // 0000~9999
  } longint;
  } longint;
   
   
Line 63: Line 63:
  pns->length = len;
  pns->length = len;
  for( i = 0; i < ARRBOUND; i++ )
  for( i = 0; i < ARRBOUND; i++ )
  pns->digits[i] = 0;
  pns->digits[i] = 0;
  j = ARRBOUND - 1;
  j = ARRBOUND - 1;
  while( len >= 4 ) {
  while( len >= 4 ) {
  pns->digits[j] = 1111;
  pns->digits[j] = 1111;
  len -= 4;
  len -= 4;
  j--;
  j--;
Line 73: Line 73:
  switch(len) {
  switch(len) {
  case 1:
  case 1:
  pns->digits[j] = 1;
  pns->digits[j] = 1;
  break;
  break;
  case 2:
  case 2:
  pns->digits[j] = 11;
  pns->digits[j] = 11;
  break;
  break;
  case 3:
  case 3:
  pns->digits[j] = 111;
  pns->digits[j] = 111;
  break;
  break;
  }
  }
Line 88: Line 88:
  int rem = 0;
  int rem = 0;
  for( ; i < ARRBOUND; i++ ) {
  for( ; i < ARRBOUND; i++ ) {
  pns->digits[i] += (rem * 10000);
  pns->digits[i] += (rem * 10000);
  rem = pns->digits[i] % divisor;
  rem = pns->digits[i] % divisor;
  }
  }
  return rem;
  return rem;
Line 106: Line 106:
  }
  }
  }
  }

Latest revision as of 00:29, 27 March 2026

문제 설명

링크 [1]
개요
입력
출력

Status

Run ID User Problem Result Memory Time Language Code Length
9255717 enochbible 2551 Time Limit Exceeded C 1263B
9255761 enochbible 2551 Accepted 184K 641MS C 1024B


Source Code

#include <stdio.h>
#define LENBOUND 10000
#define ARRBOUND 2500 // LENBOUND/4

typedef struct longint {
	int length;
	int digits[ARRBOUND]; // 0000~9999
} longint;

void ones( longint *pns, int len )
{
	int i;
	int j;
	pns->length = len;
	for( i = 0; i < ARRBOUND; i++ )
		pns->digits[i] = 0;
	j = ARRBOUND - 1;
	while( len >= 4 ) {
		pns->digits[j] = 1111;
		len -= 4;
		j--;
	}

	switch(len) {
		case 1:
		pns->digits[j] = 1;
		break;
		case 2:
		pns->digits[j] = 11;
		break;
		case 3:
		pns->digits[j] = 111;
		break;
	}
}

int division( longint *pns, int divisor ) {
	int i = ARRBOUND - (pns->length + 3) / 4;
	int rem = 0;
	for( ; i < ARRBOUND; i++ )	{
		pns->digits[i] += (rem * 10000);
		rem = pns->digits[i] % divisor;
	}
	return rem;
}

void main() {
	longint ns;
	int n;
	while( scanf("%d", &n) != EOF )	{
		int i;
		for( i = 1; i <= LENBOUND; i++ ) {
			ones(&ns, i);
			if( division(&ns, n) == 0 ) break;
		}
		if( i <= LENBOUND ) printf("%d\n", i);
	}
}