2023年少年宫高级A1班

已结束 IOI 开始于: 2023-12-17 14:30 200 小时 主持人: 14

考试时间:14:30 - 16:00

解题策略

  • T1: 栈
void solve(int arr[], int n){
	
	stack<int>st; //保存下标索引 
	st.push(1);
	for(int i = 2; i <= n; i ++){
		while(!st.empty()&& arr[st.top()] < arr[i]){ // 栈内元素数量不为空 且 栈顶元素小于即将放入的元素 
			f[st.top()] = i;  // 将栈顶的索引位置的值设置为 i 
			st.pop()
		}  
		st.push(i);
	}
	while(!st.empty()){
		f[st.top()] = 0;
		st.pop();
	}
}
  • T2:贪心
int solve2(int arr[], int n){
	int ans = 0;
	for(int i = 1; i <= n; i ++){
		if(arr[i] > arr[i-1]){
			ans += (arr[i] - arr[i-1]);
		}
	}
	return ans;
} 
  • T3:二分+单调队列
int que[N];
int head = 0;
int tail = -1;
int f[N]; // 以 i 道题 为结尾 所耗费的时间 
int time[N];
bool check(int mid){
	
	for(int i = 1; i <= n; i ++){
		// step1;队尾出队
		while(tail >= head && time[que[tail]] >= time[i]) tail --;
		// step2: 队尾入队
		que[tail++] = i; 
		
		// step3: 队首出队
		if(i - que[head] > mid) head ++;
		
		if(i > mid){
			f[i] = time[i] + time[que[head]];
		}else{
			f[i] = time[que[head]];
		}
	 	
	 	if(f[i] > Time) return false;
	}
	return true;
}
// 二分答案 
int biSearch(int l, int r){
	while((l + 1) < r){
		int mid = (l + r) >> 1;
	    if(check(mid) == true){
	    	l = mid;
		}else{
			r = mid;
		}
	}
	return l;
}

题目

请参加比赛来查看题目。
状态
已结束
规则
IOI
题目
3
开始于
2023-12-17 14:30
结束于
2023-12-25 22:30
持续时间
200 小时
主持人
参赛人数
14