int main(){ scanf("%d%d",&cowNum,&shiftNum); for(int cowIndex=0;cowIndex<cowNum;cowIndex++) scanf("%d%d",&intervals[cowIndex].begin,&intervals[cowIndex].end); printf("%d\n",hire()); return 0; }
//----------- Begin of function FirmInn::free_all_people --------// // void FirmInn::free_all_people() { Firm::free_all_people(); if( !sys.signal_exit_flag ) { for(int i = inn_unit_count; i > 0; --i ) { if( inn_unit_array[i-1].spy_recno && (transfer_inn_unit(i) || hire(i, 1)) ) { // spy try to transfer to hire inn, if fails, escape from the inn } else { del_inn_unit(i); } } } else { for(int i = inn_unit_count; i > 0; --i ) { del_inn_unit(i); } } }
//--------- Begin of function FirmInn::update_del_hire_list --------// // void FirmInn::update_del_hire_list() { //------- existing units leave -------// for( int i=inn_unit_count ; i>0 && inn_unit_count>0 ; i-- ) { if( --inn_unit_array[i-1].stay_count==0 ) { if( inn_unit_array[i-1].spy_recno && (transfer_inn_unit(i) || hire(i, 1)) ) { // spy try to transfer to hire inn, if fails, escape from the inn } else { del_inn_unit(i); } /* if( firm_recno == firm_array.selected_recno ) { if( browse_hire.recno() > i && browse_hire.recno() > 1 ) browse_hire.refresh( browse_hire.recno()-1, inn_unit_count ); } */ } } }
//--------- Begin of function FirmInn::detect_info ---------// // void FirmInn::detect_info() { firm_inn_ptr = this; if( detect_basic_info() ) return; //-------- detect spy button ----------// if( !own_firm() ) { detect_spy_button(); return; } //-------------------------------------// if( browse_hire.detect() ) { put_det(INFO_UPDATE); } if( button_hire.detect('R') && inn_unit_count > 0 ) { // ###### begin Gilbert 31/7 #######// se_res.far_sound(center_x, center_y, 1, 'S', unit_res[inn_unit_array[browse_hire.recno()-1].unit_id]->sprite_id, "RDY" ); // ###### end Gilbert 31/7 #######// if(remote.is_enable()) { // packet structure : <firm recno>, <hire Id> <nation no> short *shortPtr=(short *)remote.new_send_queue_msg(MSG_F_INN_HIRE, 3*sizeof(short)); shortPtr[0] = firm_recno; shortPtr[1] = browse_hire.recno(); shortPtr[2] = nation_recno; } else { hire(browse_hire.recno()); } } }
//-------- Begin of function FirmInn::transfer_inn_unit --------// // int FirmInn::transfer_inn_unit(int recNo) { err_when( recNo < 1 ); if( recNo > inn_unit_count ) return 0; InnUnit *innUnit = inn_unit_array+recNo-1; if( !innUnit->spy_recno ) return 0; // only spy considers transfer Spy *spyPtr = NULL; if( innUnit->spy_recno && !spy_array.is_deleted(innUnit->spy_recno) ) spyPtr = spy_array[innUnit->spy_recno]; // -------- scan any inn firm in world ----------// int ownFirmRecno = 0; int anyOwnInn = 0; int firmRecno = 1+misc.random(firm_array.size()); int firmCount; for( firmCount = firm_array.size(); firmCount > 0; --firmCount, ++firmRecno ) { if( firmRecno > firm_array.size() ) firmRecno -= firm_array.size(); err_when(firmRecno < 1 || firmRecno > firm_array.size()); if( firm_array.is_deleted(firmRecno) ) continue; FirmInn *firmInn = firm_array[firmRecno]->cast_to_FirmInn(); if( !firmInn ) continue; if( spyPtr && firmInn->nation_recno == spyPtr->true_nation_recno ) { if( !anyOwnInn ) anyOwnInn = firmRecno; } if( firmRecno == firm_recno ) // never go back to the same inn continue; if( firmInn->inn_unit_count >= MAX_INN_UNIT ) continue; if( spyPtr && firmInn->nation_recno == spyPtr->true_nation_recno ) { if( !ownFirmRecno ) ownFirmRecno = firmRecno; continue; // spy tend not to go back to own firmInn, unless no other choice } break; } if( firmCount <= 0 ) // if no other firm found, go back to own firm firmRecno = ownFirmRecno; if( firmRecno ) // if no any firm to go return false { // ------ transfer inn unit -------// FirmInn *firmInn = firm_array[firmRecno]->cast_to_FirmInn(); err_when( !firmInn ); InnUnit *newInnUnit = firmInn->inn_unit_array + firmInn->inn_unit_count; firmInn->inn_unit_count++; *newInnUnit = *innUnit; // ------- generate new stay count ------// newInnUnit->stay_count = 10 + misc.random(5); newInnUnit->set_hire_cost(); // ------ trasfer Spy ------- // if( spyPtr ) spyPtr->set_place(SPY_FIRM, firmRecno); innUnit->spy_recno = 0; // prevent del_inn_unit call spy_array.del_spy // ------ delete inn unit of current inn ------// del_inn_unit(recNo); innUnit = newInnUnit; // set innUnit to the transferred place for later use } else if( (firmRecno = anyOwnInn) ) { // mobilize in another any own inn hire( recNo, 1, firmRecno ); innUnit = NULL; } return firmRecno; }
//--------- Begin of function FirmInn::detect_info ---------// // void FirmInn::detect_info() { // firm_inn_ptr = this; Firm::detect_info(); // if( detect_basic_info() ) // return; if( !should_show_info() ) return; detect_unit_list(); // ------ detect hire button -------// // since button_hire and button_spy_mobilize share the same place // if one is not visible, do not call detect() to avoid incorrect help text displayed if( button_hire_visible && button_hire.detect() && selected_unit_id > 0 && selected_unit_id <= inn_unit_count ) { InnUnit *innUnit = inn_unit_array + selected_unit_id - 1; se_ctrl.immediate_sound("TAXGRANT"); se_res.far_sound(center_x, center_y, 1, 'S', unit_res[innUnit->unit_id]->sprite_id, "RDY" ); if(remote.is_enable()) { // packet structure : <firm recno>, <hire Id> <nation no> <spy escape> short *shortPtr=(short *)remote.new_send_queue_msg(MSG_F_INN_HIRE, 4*sizeof(short)); shortPtr[0] = firm_recno; shortPtr[1] = selected_unit_id; shortPtr[2] = nation_recno; // ###### begin Gilbert 13/2 #######// shortPtr[3] = 0; // ###### end Gilbert 13/2 #######// } else { hire(selected_unit_id, 0); } // ------ clear selected_unit_id ------// selected_unit_id = 0; } else if( button_spy_mobilize_visible && button_spy_mobilize.detect() && selected_unit_id > 0 && selected_unit_id <= inn_unit_count ) { se_res.far_sound(center_x, center_y, 1, 'S', unit_res[inn_unit_array[selected_unit_id-1].unit_id]->sprite_id, "RDY" ); err_when( spy_array.is_deleted(inn_unit_array[selected_unit_id-1].spy_recno) ); Spy *spyPtr = spy_array[inn_unit_array[selected_unit_id-1].spy_recno]; if( !remote.is_enable() ) { if( spyPtr->mobilize_firm_spy() ) { spyPtr->notify_cloaked_nation_flag = 0; // reset it so the player can control it } } else { // packet structure <spy recno> short *shortPtr = (short *)remote.new_send_queue_msg(MSG_SPY_LEAVE_FIRM, sizeof(short) ); *shortPtr = spyPtr->spy_recno; } // ------ clear selected_unit_id ------// selected_unit_id = 0; } // -------- detect buy item ------// if( selected_unit_id > 0 && selected_unit_id <= inn_unit_count ) { InnUnit *innUnit = inn_unit_array + selected_unit_id - 1; if( button_buy_item.detect() ) { se_ctrl.immediate_sound("TAXGRANT"); if( !remote.is_enable() ) { buy_item( selected_unit_id, 0 ); } else { short *shortPtr = (short *)remote.new_send_queue_msg(MSG_F_INN_BUY_ITEM, 2*sizeof(short)); // packet structure : <firm recno>, <inn unid id> shortPtr[0] = firm_recno; shortPtr[1] = selected_unit_id; } se_ctrl.immediate_sound("TURN_ON"); } else if( innUnit->item.id ) { help.set_custom_help( button_buy_item.x1, button_buy_item.y1, button_buy_item.x2, button_buy_item.y2, text_firm.str_buy_item_help( &innUnit->item ), innUnit->item.item_desc() ); } } }