40分其他点全WA求助。。
查看原帖
40分其他点全WA求助。。
759274
Stevehim楼主2022/8/21 18:46

自己熬出来的代码。。。不知道如何修改

//初涉队列的年氢人 
//2022.8.21这道题留着等能下载数据再说 
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
typedef long long ll;
struct person{
	int nation;
	int time;
};
//如何确定队列:分人
queue<person>n;
ll national[114514119] = {0};
ll limit_time = 86400;
ll sum_time = 0;
ll ans = 0; 
ll time_cache[114514]; 
//既然一船好几个人,我们能不能把时间平分 ?不能 
//但是我们可以搞一搞。。。伪动态的数组 
int index_1[114514] = {0}; //该数组用来存储某艘船的k1
int cache = 0; 
void work (person aa[],int k1){
	//记录时间并加以比较 
	ll sum_time_1 = aa[0].time;
//	cout << "sum_time_1="<<sum_time_1<<endl; 
	if(sum_time_1 + sum_time - time_cache[cache] >= limit_time){ // 准备弹出##这里如果去掉等号OJ也是40但是样例2过不了
//		cout << "当前总时间为"<<sum_time+sum_time_1<<" 准备弹出第"<<cache+1<<"艘船"<<endl;
		person y[index_1[cache]]; //我们要弹出的是最先进入队列的一个数组 
		int k2 = index_1[cache]; //把这个数组的长度提取出来 
		for(int i = 0; i< k2;i++){
			y[i] = n.front(); //提取
			n.pop(); //连续执行k2次 
		} 
		//将时间减掉
		sum_time -= y[0].time; //数组每个结构体时间一样 
		//开始执行各项操作 
		for(int i = 0; i < k2;i++){ //循环k2次 
			national[y[i].nation] --; //减去国籍人数 
			if(national[y[i].nation] == 0){ //判断是否减没了一个国家[doge] 
//				cout << "当前" << y[i].nation << " 号国籍为0,答案减一" <<endl;
				ans--; //答案减一 
//				cout << "当前答案为:" << ans << endl;
			}
		}
		cache ++; //下次就是第二艘船了嘿嘿嘿 
	}
	sum_time += sum_time_1;
//	cout << "当前总时间为" <<sum_time << endl; 
//	cout << "进入"<<endl;
	for(int i = 0; i< k1;i++){
		n.push(aa[i]);
//		cout <<"第"<< i<<"个人入队完毕"<<endl;
		if(national[aa[i].nation] == 0){
			ans++;
			national[aa[i].nation]++;
//			cout<<"当前"<<aa[i].nation<< "号国籍人数为:"<< national[aa[i].nation]<<endl;
//			cout << "答案增加,现在答案为"<< ans <<endl;
		}else{
//			cout<<"当前"<<aa[i].nation<< "号国籍人数为:"<< national[aa[i].nation]<<endl;
			national[aa[i].nation]++;
		}
	}
//	cout <<"结束"<<endl;
	return;
} 
int N;
int ti,ki;
int main()
{
	cin >> N;
	int temp_time; 
	for(int i = 0; i< N;i++){
		cin >> ti >> ki;
		person aa[ki];
		index_1[i] = ki; //记录当前ki
		for(int j = 0; j < ki;j++){
			cin >> aa[j].nation;
			aa[j].time = ti-temp_time;
			temp_time = ti;
			time_cache[i] = ti;
		}
		work(aa,ki); 
		cout << ans<<endl;
	}
    return 0;
}

2022/8/21 18:46
加载中...