結果
| 問題 |
No.138 化石のバージョン
|
| コンテスト | |
| ユーザー |
demu
|
| 提出日時 | 2015-06-01 00:49:29 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 5,000 ms |
| コード長 | 1,727 bytes |
| コンパイル時間 | 753 ms |
| コンパイル使用メモリ | 24,832 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-29 13:20:21 |
| 合計ジャッジ時間 | 1,476 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 33 |
コンパイルメッセージ
main.cpp: In function ‘int divide(char*)’:
main.cpp:6:30: warning: ‘sizeof’ on array function parameter ‘part’ will return size of ‘char*’ [-Wsizeof-array-argument]
6 | for (int i=0; i < sizeof(part); i++) {
| ~^~~~~
main.cpp:4:17: note: declared here
4 | int divide(char part[10]) {
| ~~~~~^~~~~~~~
main.cpp: In function ‘int main()’:
main.cpp:60:13: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘char (*)[30]’ [-Wformat=]
60 | scanf("%s",&version[0]);
| ~^ ~~~~~~~~~~~
| | |
| | char (*)[30]
| char*
main.cpp:61:13: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘char (*)[30]’ [-Wformat=]
61 | scanf("%s",&version[1]);
| ~^ ~~~~~~~~~~~
| | |
| | char (*)[30]
| char*
main.cpp:60:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
60 | scanf("%s",&version[0]);
| ~~~~~^~~~~~~~~~~~~~~~~~
main.cpp:61:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
61 | scanf("%s",&version[1]);
| ~~~~~^~~~~~~~~~~~~~~~~~
ソースコード
#include <stdio.h>
#include <string.h>
int divide(char part[10]) {
int length = 0;
for (int i=0; i < sizeof(part); i++) {
if (part[i] != '\0') length++;
else return length;
}
return length;
}
void separate(char org[2][30], char part[2][3][10], int length[2][3]) {
for (int i = 0; i < 2; i++) {
char* tp = strtok(org[i], ".");
sprintf(part[i][0],"%s",tp);
int count = 0;
while (tp != NULL) {
tp = strtok(NULL, ".");
if (tp != NULL) {
if (count++ == 0) sprintf(part[i][1], "%s", tp);
else sprintf(part[i][2], "%s", tp);
}
}
for (int j=0; j<3; j++) length[i][j] = divide(part[i][j]);
}
}
void bigger(char part[2][3][10], int length[2][3]) {
for (int j=0; j < 3; j++) {
if (length[0][j] > length[1][j]) {
printf("YES\n");
return;
} else if (length[0][j] == length[1][j]) {
for (int k =0; k < length[0][j]; k++) {
if ((int) part[0][j][k] > (int) part[1][j][k]) {
printf("YES\n");
return;
} else if ((int) part[0][j][k] < (int) part[1][j][k]) {
printf("NO\n");
return;
}
}
} else {
printf("NO\n");
return;
}
}
printf("YES\n"); // 全て等しいとき
}
int main() {
int sum[2] = {0,0};
int length[2][3] = {0};
char version[2][30];
char part[2][3][10]= {0};
scanf("%s",&version[0]);
scanf("%s",&version[1]);
separate(version, part, length);
bigger(part, length);
return 0;
}
demu