C

感觉题目描述的巨绕,看了好久都很迷,(也可能是我的问题)。其实题意很简单,但样例就很快能明白。

思路:直接统计,然后根据题意输出。

code:

#include<bits/stdc++.h>using namespace std;
#define endl '\n'
#define ios std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define int long long
#define x first
#define y second
const int N=2e5+10;
const double eps=1e-4;
typedef pair<int,int> pii;
int a[N];
map<int,int> mp;
vector<int> v;void work()
{int n,k;cin>>n;for(int i=1;i<=n;i++) {cin>>a[i]; mp[a[i]]++;v.push_back(a[i]);}sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());int cnt=v.size();for(int i=n;i>0;i--){if(cnt>=0) cout<<mp[v[cnt-1]]<<endl;else cout<<0<<endl; cnt--;}}
signed main()
{ios;int t;//cin>>t;t=1;while(t--){work();}return 0;
}

D
题目大意:有个n*m的网格,有N个格子有障碍物,你初始位置在(x,y)。接下来有Q次指令,每次指令为"URLD"的一种,还有一个数x表示向哪个方向移动多少次。不可以穿过障碍物和网格外面。问在每次指令后,你所处的位置坐标。

思路:我们可以把每一行和每一列的障碍物都记录下来,然后使用二分查找,来模拟走的过程。重点就是怎么模拟,为了方便,可以插入两个哨兵,避免对边界进行分类讨论。
此题有点卡常。我一开始是这样写的:

map<int,vector<int> > r,c;

这样的话有4个测试点过不去,换成:

map<int,set<int> > r,c;

这样就好了,直接使用set的二分查找就好。

code:

#include<bits/stdc++.h>using namespace std;
#define endl '\n'
#define ios std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//#define int long long
#define x first
#define y second
const int N=2e5+10;
const double eps=1e-4;
typedef pair<int,int> pii;int n,m,k;
map<int,set<int> > r,c;
void work()
{scanf("%d%d",&n,&m); //cin>>n>>m;int x,y;//cin>>x>>y;scanf("%d%d",&x,&y);//cin>>k;scanf("%d",&k);for(int i=1;i<=k;i++){int x1,y1;//cin>>x1>>y1;scanf("%d%d",&x1,&y1);r[x1].insert(y1); c[y1].insert(x1);}//sort(a.begin(),a.end()); sort(b.begin(),b.end());int q;//cin>>q;scanf("%d",&q);while(q--){char op[2]; int cnt;//cin>>op>>cnt;scanf("%s",op); scanf("%d",&cnt);if(*op=='R'){if(r[x].size()) {r[x].insert(0);r[x].insert(m+1);auto id=r[x].upper_bound(y);int ans=*id;if(ans>y+cnt) y+=cnt;else y=ans-1;y=min(y,m);}else y=min(y+cnt,m);}if(*op=='D'){if(c[y].size()) {c[y].insert(0);c[y].insert(n+1);auto id=c[y].upper_bound(x);int ans=*id;if(ans>x+cnt) x+=cnt;else x=ans-1;x=min(x,n);}else x=min(x+cnt,n);}if(*op=='L'){if(r[x].size()) {r[x].insert(0);r[x].insert(m+1);auto id=r[x].upper_bound(y); id--;int ans=*id;if(ans<y-cnt) y-=cnt;else y=ans+1;y=max(y,1);}else y=max(y-cnt,1);}if(*op=='U'){if(c[y].size()) {c[y].insert(0);c[y].insert(n+1);auto id=c[y].upper_bound(x); id--;int ans=*id;if(ans<x-cnt) x-=cnt;else x=ans+1;x=max(x,1);//cout<<ans<<"###"<<endl;}else x=max(x-cnt,1);}//cout<<x<<" "<<y<<endl;printf("%d %d\n",x,y);}
}
signed main()
{int t;//cin>>t;t=1;while(t--){work();}return 0;
}

E
题目大意:有一个序列A,和一本书。初始A和书都为空。有下面四种操作:
ADD x:给序列A的的末尾加上x
DELETE :若A不为空,则删除A的末尾元素
SAVE x:把书的第x页用A来替代
LOAD x:把A用书的第x页来替代

输出每次操作后,A的最后一个元素为多少。

思路:用链表来模拟插入和删除的操作即可。

code:

#include<bits/stdc++.h>using namespace std;
#define endl '\n'
#define ios std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define int long long
#define x first
#define y second
const int N=1e6+10;
const double eps=1e-4;
typedef pair<int,int> pii;
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};int n,m;
int last,cnt;
map<int,int> mp;
int a[N],fa[N];
void work()
{int q;cin>>q;a[0]=-1;while(q--){string s;int x;cin>>s;if(s=="ADD"){cin>>x;a[++cnt]=x;fa[cnt]=last;last=cnt;}else if(s=="DELETE"){last=fa[last];}else if(s=="SAVE"){cin>>x;mp[x]=last;}else {cin>>x;last=mp[x];}cout<<a[last]<<" ";}}
signed main()
{ios;int t;//cin>>t;t=1;while(t--){work();}return 0;
}

AtCoder Beginner Contest 273 CDE题解相关推荐

  1. Mynavi Programming Contest 2021(AtCoder Beginner Contest 201)题解

    文章目录 A - Tiny Arithmetic Sequence B - Do you know the second highest mountain? C - Secret Number D - ...

  2. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)题解

    文章目录 A - Century B - 200th ABC-200 C - Ringo's Favorite Numbers 2 D - Happy Birthday! 2 E - Patisser ...

  3. [AtCoder Beginner Contest 215] A-G题解

    文章目录 A - Your First Judge B - log2(N) C - One More aab aba baa D - Coprime 2 E - Chain Contestant F ...

  4. Atcoder Beginner Contest 174(ABC174) 题解

    打到了Rank33Rank\ 33Rank 33,还是不错的. 第一次顺顺畅畅没有WA地AK了一场ABC,写篇题解纪念一下-- Solution T1 直接模拟即可. T2 分别枚举每个点并用已给的公 ...

  5. AtCoder Beginner Contest 236 A-D题解

    A - chukodai 题意 使字符串第a个字符与第b个字符交换` #include<bits/stdc++.h> using namespace std; int dp[109][10 ...

  6. AtCoder Beginner Contest 238 ABC题解 数学函数 几何 数论数学

    A Exponential or Quadratic 第一题的意思是判断2n>n2?,如果大于就输出"Yes", 否则输出"No" 可以使用数学函数pow ...

  7. AtCoder Beginner Contest 276 CDEF题解

    C 题意:求这个排列的上一个排列. 直接用STL自带的求排列即可. code: #include<bits/stdc++.h>using namespace std; #define en ...

  8. AtCoder题解 —— AtCoder Beginner Contest 187 —— B - Gentle Pairs —— 暴力

    题目相关 题目链接 AtCoder Beginner Contest 187 B 题,https://atcoder.jp/contests/abc187/tasks/abc187_b. Proble ...

  9. AtCoder题解 —— AtCoder Beginner Contest 182 —— D - Wandering

    题目相关 题目链接 AtCoder Beginner Contest 182 D 题,https://atcoder.jp/contests/abc182/tasks/abc182_d. Proble ...

最新文章

  1. C#对话框-使用打开和保存对话框
  2. Compiling Fortran
  3. 【Linux系统编程】 浅谈标准I/O缓冲区
  4. 知识图谱论文阅读(十八)【KDD2019】AKUPM: Attention-Enhanced Knowledge-Aware User Preference Model for Recommend
  5. 【飞秋】关于结构体和结构体指针的P-INVOKE
  6. java 获取指定后缀名的文件
  7. WPF中ListBox的绑定
  8. 均薪连续三年过万,北上深人才需求大 !| 5G 人才报告
  9. RabbitMQ学习笔记(二) 工作队列
  10. Spring源码之ApplicationContext(八)消息广播
  11. TwinCAT3入门教程4-伺服常用功能程序实现
  12. Python|LeetCode习题答案汇总
  13. 生信技能树linux虚拟机,Linux 20题-生信技能树
  14. 云管平台-FIT2CLOUD CMP2.0
  15. 微信小程序(1)--注册及下载IDE
  16. HTML中abbr标记,HTML abbr标记
  17. 高版本Ubuntu(如22.02)修改apt源,快速安装低版本gcc/g++
  18. 爬虫爬取python词汇_Python爬虫入门案例:获取百词斩已学单词列表
  19. Golang 浮点数运算 避免精度损失 Decimal包
  20. HTML5+CSS3小实例:炫彩的流光按钮

热门文章

  1. C#编程-147:线程基础_彭世瑜_新浪博客
  2. 聚集诱导发光(AIE)活性基团四苯乙烯修饰aza-BODIPY荧光染料
  3. 收藏:python中抓取网易云中某个歌手歌词作词云
  4. maskrcnn用于目标检测_用自己的数据训练Mask R-CNN目标检测/分割模型
  5. gitee与github使用有感
  6. linux查看网关gateway
  7. WIN|U盘修复详细讲解(亲测可用)
  8. bitcoin testnet
  9. 雷电模拟器无法修改网络,没有出现修改网络的选项,导致fiddler无法连接
  10. ConstitutionDAO逝者已逝 但DAO长存