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;
}
浙公网安备 33010602011771号