2026.09.06 模拟总结

模板

这玩意没有模板吧?思维难度也不大。

T1 Alice, Bob and Candies

一遍过,没啥好讲的按题目模拟即可。

code:

#include<bits/stdc++.h>
using namespace std;
int T;
int n,a[1010]; 
int main(){
	cin>>T;
	while(T--){
		int A=0,B=0,cnt=0;
		cin>>n;
		for(int i=1;i<=n;i++)cin>>a[i];
		int l=1,r=n;
		int sum=1;
		while(l<=r){
			cnt++;
			if(cnt%2==1){
				int s=0;
				for(;l<=r&&s<sum;l++){
					s+=a[l];
					A+=a[l];
				}
				sum=s+1;
			}else{
				int s=0;
				for(;r>=l&&s<sum;r--){
					s+=a[r];
					B+=a[r];
				}
				sum=s+1;
			}
		}
		cout<<cnt<<" "<<A<<" "<<B<<"\n";
	}
	return 0;
}

T2 Dash

仔细读题。

那么他会消耗那里的物品

如果你没看到写出了下面的代码,你将会 \(16\)。

code:

#include<bits/stdc++.h>
using namespace std;
map<pair<int,int>,bool> mp;
int n,m,h,k;
string s;
int main(){
	cin>>n>>m>>h>>k;
	cin>>s;
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		mp[{x,y}]=1;
	}
	int x=0,y=0;
	for(int i=0;i<n;i++){
		if(s[i]=='R'){
			x++;
		}else if(s[i]=='L'){
			x--;
		}else if(s[i]=='U'){
			y++;
		}else{
			y--;
		}
		h--;
		if(h<0){
			cout<<"No";
			return 0;
		}
		if(mp[{x,y}])h=max(h,k);
	}
	cout<<"Yes";
	return 0;
}

好当你仔细读题后将 if(mp[{x,y}])h=max(h,k); 改为 if(mp[{x,y}])h=max(h,k),mp[{x,y}]=0; 后喜提 \(19\) 分(话说样例都没过我是咋敢交的(逃。

why? 仔细读题。

并且他的生命值严格小于 \(K\)

ok. 以下是 AC 代码。

code:

#include<bits/stdc++.h>
using namespace std;
map<pair<int,int>,bool> mp;
int n,m,h,k;
string s;
int main(){
	cin>>n>>m>>h>>k;
	cin>>s;
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		mp[{x,y}]=1;
	}
	int x=0,y=0;
	for(int i=0;i<n;i++){
		if(s[i]=='R'){
			x++;
		}else if(s[i]=='L'){
			x--;
		}else if(s[i]=='U'){
			y++;
		}else{
			y--;
		}
		h--;
		if(h<0){
			cout<<"No";
			return 0;
		}
		if(mp[{x,y}]&&h<k)h=k,mp[{x,y}]=0;
	}
	cout<<"Yes";
	return 0;
}

同时还有一点要注意。

如果 Takahashi 的生命值变为负数,他将倒下并停止移动。

嗯对,仔细读题。

T3 Loong Tracking

没啥好说的,但更新龙的位置需要注意不能直接暴力会 TLE。

这里我用了 deque(常数警告。每次更新将末尾去掉,相当于更新了位置但头没了。这时在将头插入到开头。

code:

#include<bits/stdc++.h>
using namespace std;
int n,Q;
struct node{
	int x,y;
};
int main(){
	cin>>n>>Q;
	deque<node> q;
	for(int i=1;i<=n;i++)q.push_back({i,0});
	
	while(Q--){
		int op;
		cin>>op;
		if(op==1){
			char c;
			cin>>c;
			int x=q[0].x,y=q[0].y;
			q.pop_back();
			if(c=='R'){
				x++;
			}else if(c=='L'){
				x--;
			}else if(c=='U'){
				y++;
			}else{
				y--;
			}
			q.push_front({x,y});
		}else{
			int pos;
			cin>>pos;
			pos--;
			cout<<q[pos].x<<" "<<q[pos].y<<"\n"; 
		}
	}
	return 0;
}

T4 时间复杂度

敬请期待。

T5 Berpizza

一个 queue 模拟 Monocarp。一个 priority_queue 模拟 Polycarp。注意判断一下是否服务过了。

code:

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
priority_queue<pair<int,int> >q1;
queue<int> q2;
int q;
int tot;
bool flag[500010];
int main(){
	cin>>q;
	while(q--){
		int op;
		cin>>op;
		if(op==1){
			int m;
			cin>>m;
			q1.push({m,-(++tot)});
			q2.push(tot);
			flag[tot]=1;
		}else if(op==2){
			while(!flag[q2.front()])q2.pop();
			flag[q2.front()]=0;
			cout<<q2.front()<<" ";
			q2.pop();
		}else{
			while(!flag[-q1.top().second])q1.pop();
			flag[-q1.top().second]=0;
			cout<< -q1.top().second<<" ";
			q1.pop();
		}
	}
    return 0;
}

posted on 2026-09-07 22:43  zzyycc2013  阅读(19)  评论(0)    收藏  举报