BZOJ 4143 The Lawyer
这道题看起来很吓人,但事实上看懂后会发现,其根本没有任何技术含量,做这道题其实要考虑的就是每天最早结束的一场的结束时间以及最晚开始的一场的开始时间,如果结束时间早于开始时间,那么OK就这两场,否则输出无解,要注意的是,如果想在传入时就把每天分开,记得标记每一场的序号。
代码如下:
#include<cstdlib> #include<cstdio> #include<iostream> using namespace std; long long int i_day,i_huiyi,temp_1,temp_2,temp_3; long long int i_hui[21][500000][3]; long long int i_nob[21]; long long int i_min,nob_1,i_max=80000000,nob_2; int main() { cin>>i_huiyi;cin>>i_day; for(int i=0;i<i_huiyi;i++) { cin>>temp_1;cin>>temp_2;cin>>temp_3; i_hui[temp_3][i_nob[temp_3]][0]=temp_1; i_hui[temp_3][i_nob[temp_3]][1]=temp_2; i_hui[temp_3][i_nob[temp_3]][2]=i+1; i_nob[temp_3]++; } for(int i=1;i<=i_day;i++) { for(int m=0;m<i_nob[i];m++) { if(i_hui[i][m][0]>i_min) { i_min=i_hui[i][m][0]; nob_1=i_hui[i][m][2]; } if(i_hui[i][m][1]<i_max) { i_max=i_hui[i][m][1]; nob_2=i_hui[i][m][2]; } } if(i_min>i_max) { cout<<"TAK"<<" "<<nob_1<<" "<<nob_2<<endl; i_min=0;i_max=80000000; } else { cout<<"NIE"<<endl; i_min=0;i_max=80000000; } } return 0; }