結果

問題 No.115 遠足のおやつ
ユーザー tsuishitsuishi
提出日時 2021-03-30 13:54:54
言語 C
(gcc 12.3.0)
結果
WA  
実行時間 -
コード長 3,263 bytes
コンパイル時間 1,317 ms
コンパイル使用メモリ 31,872 KB
実行使用メモリ 14,008 KB
最終ジャッジ日時 2024-05-07 17:18:16
合計ジャッジ時間 7,228 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
8,476 KB
testcase_01 AC 0 ms
5,376 KB
testcase_02 WA -
testcase_03 AC 1 ms
5,376 KB
testcase_04 TLE -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
testcase_24 -- -
testcase_25 -- -
testcase_26 -- -
testcase_27 -- -
testcase_28 -- -
testcase_29 -- -
testcase_30 -- -
testcase_31 -- -
testcase_32 -- -
testcase_33 -- -
testcase_34 -- -
testcase_35 -- -
testcase_36 -- -
testcase_37 -- -
testcase_38 -- -
testcase_39 -- -
testcase_40 -- -
testcase_41 -- -
testcase_42 -- -
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c: In function 'GETWORD':
main.c:38:21: warning: implicit declaration of function 'getchar_unlocked' [-Wimplicit-function-declaration]
   38 | #define mygc(c) (c)=getchar_unlocked()
      |                     ^~~~~~~~~~~~~~~~
main.c:39:61: note: in expansion of macro 'mygc'
   39 | static char *GETWORD(char* str) {char c;char *cp;cp=&str[0];mygc(c);while(c!=EOF){if((c==' ')||(c=='\n'))break;*cp++=c;mygc(c);}*cp='\0';return &str[0];}
      |                                                             ^~~~

ソースコード

diff #

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
// まだ!
// Yukicoder №115 遠足のおやつ ★★
// https://yukicoder.me/problems/no/115
// ***********************
// for debug
#define DEBUGd
// -----------

#define NOP do{}while(0)
#ifdef DEBUG
#include <time.h>
#define TRACE(...) do{printf(__VA_ARGS__);fflush(stdout);}while(0)
#define TRACECR do{putchar_unlocked('\n');fflush(stdout);}while(0)
static clock_t	startclock;
void DEBUGINIT(void){TRACE("--DEBUG MODE --\n");startclock=clock();}
void DEBUGEND(void){startclock=clock()-startclock;TRACE("--finish --\ntime is %.3fms",startclock/1000.);}
#else
#define TRACE(...) NOP
#define TRACECR NOP
void DEBUGINIT(void){return;}
void DEBUGEND(void){return;}
#endif

#define	mypc(d)	putchar_unlocked((int)(d))
#define PRINCR mypc('\n')
#define NOCR(strig) do{char *p;p=strchr(strig,'\n');if(p)*p='\0';}while(0)
// The out-of-date function
#define	asctime(...)	asctime_s(...)
#define	ctime(...)		ctime_s(...)
#define	strlen(a)	mystr_len(a)

// for stdio
#define GETLINE(str) do{char *p;fgets(str,sizeof(str),stdin);p=strchr(str,'\n');if(p)*p='\0';}while(0)
#define mygc(c) (c)=getchar_unlocked()
static char *GETWORD(char* str) {char c;char *cp;cp=&str[0];mygc(c);while(c!=EOF){if((c==' ')||(c=='\n'))break;*cp++=c;mygc(c);}*cp='\0';return &str[0];}
#define	GETINTS(a,b) {char s[34];int *ap=a;REP(i,b){GETWORD(s);*ap++=atoi(s);}}
static int GETLINEINT(void) {char s[34];GETLINE(s);return atoi(s);}
static int GETWORDINT(void) {char s[34];GETWORD(s);return atoi(s);}
static long GETWORDLONG(void) {char s[34];GETWORD(s);return atol(s);}
static int maxi(int a,int b){if((a)>(b)){return a;}return b;}
static long maxl(long a,long b){if(a>b){return a;}return b;}
#define SWAP(type,a,b) do{type _c;_c=a;a=b;b=_c;}while(0)
#define MAX(a,b)	((a)>(b)?(a):(b))
#define MIN(a,b)	((a)<(b)?(a):(b))
#define REP(a,b) for(int a=0;a<(int)(b);++a)
#define REP1(a,b) for(int a=1;a<=(int)(b);++a)
#define Possible(a) 	   printf("%s",((a)?"Possible":"Impossible"))
#define possible(a) 	   printf("%s",((a)?"possible":"impossible"))

int	N,D,K;
// *********************
#define	KUMIMAX	(10)
int	answer[KUMIMAX];
int	buffer[KUMIMAX];
int	used[105];
int	existf = 0;
void setans(void) {
	int sum = 0;
	int	bigger = 0;
	for(int i = 0; i < K ; i++ ) {
		sum +=  buffer[i];
	}

	if( sum != D ) return;
	existf = 1;

	REP(k,K) fprintf(stderr,"%d,",buffer[k]);fprintf(stderr,"\n");
	
	for(int i = 0; i < K ; i++ ) {
		if( buffer[i] < answer[i] ) { bigger = 1; break; }
		if( buffer[i] > answer[i] ) break;
	}
	if( bigger ) {
		for(int i = 0; i < K ; i++ ) {
			answer[i] =  buffer[i];
		}
	}
}
void combinations(int n, int r)
{
	for(int i=n; i > 0 ; i-- ) {
		if( used[i] ) continue;
		used[i] = 1;
		buffer[r-1] = i;
		if( r == 1 ) {
			setans();
			used[i] = 0;
			return;
		}
		combinations(i-1,r-1);
		used[i] = 0;
	}
}
// *********************
// *********************
int main( void ) {
	int	sum = 0;

	DEBUGINIT();
	N = GETWORDINT();
	D = GETWORDINT();
	K = GETWORDINT();
	REP(i,N) used[i] = 0;
	REP(i,K) answer[i] = N+1;
	combinations( N , K );
	if( existf ) {	// 存在する
		REP(i,K) {
			if( i ) printf(" ");
			printf("%d", answer[i]);
		}
	} else {
		printf("%d\n",-1);
	}
	DEBUGEND();
}

0