結果
| 問題 |
No.497 入れ子の箱
|
| コンテスト | |
| ユーザー |
ふっぴー
|
| 提出日時 | 2017-03-25 00:01:10 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 4 ms / 5,000 ms |
| コード長 | 1,448 bytes |
| コンパイル時間 | 289 ms |
| コンパイル使用メモリ | 32,768 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-06 02:23:00 |
| 合計ジャッジ時間 | 1,322 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 |
ソースコード
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
void swap3(int *a,int *b,int *c);
void swap2(int *a,int *b);
void Qsort(int x[], int left, int right, int y[], int z[]);
void swap(int x[],int i,int j);
int max(int a,int b);
int main(void){
int n;
scanf("%d",&n);
int x[n],y[n],z[n];
int a,b,c;
int i,j;
for(i=0;i<n;i++){
scanf("%d %d %d",&a,&b,&c);
swap3(&a,&b,&c);
x[i]=a;y[i]=b;z[i]=c;
}
int dp[n];
for(i=0;i<n;i++){
dp[i]=1;
}
Qsort(x,0,n-1,y,z);
for(i=0;i<n;i++){
for(j=0;j<i;j++){
if(x[i]>x[j] && y[i]>y[j] && z[i]>z[j]){
dp[i]=max(dp[j]+1,dp[i]);
}
}
}
int ans=1;
for(i=0;i<n;i++){
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
return 0;
}
void swap2(int *a,int *b){
int k;
if(*a<=*b){
k=*a;
*a=*b;
*b=k;
}
}
void swap3(int *a,int *b,int *c){
if(*a<*b){
swap2(a,b);
}
if(*a<*c){
swap2(a,c);
}
if(*b<*c){
swap2(b,c);
}
}
void Qsort(int x[], int left, int right,int y[],int z[]){
int i,j;
int pivot;
i=left;
j=right;
pivot=x[(left+right)/2];
while(1){
while(x[i]<pivot)
i++;
while(pivot<x[j])
j--;
if(i>=j)
break;
swap(x,i,j);
swap(y,i,j);
swap(z,i,j);
i++;
j--;
}
if(left<i-1)
Qsort(x,left,i-1,y,z);
if(j+1<right)
Qsort(x,j+1,right,y,z);
}
void swap(int x[],int i,int j){
int temp;
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
int max(int a,int b){
if(a>=b){
return a;
}else{
return b;
}
}
ふっぴー