1.寄包柜

看到题目最容易想到开二位数组

但数据量过大,因此需要map

#include <bits/stdc++.h>
using namespace std;
map<int,map<int,int> >a;

这里开了一个map,a的第一个下标是一个int类型的key(代表柜子位置),第二个下标是里面map的key(柜子上的格子号),里面map的value就是储存的值

含义类似于两个地址叠加,合起来指向存储的东西

因为是两个地址,所以就不会出现二维数组无用空间开太大的问题,问题就解决了

代码如下

int main()
{
int n,q;
int did,i,j,k;
cin>>n>>q;
for(int t=0;t<q;t++)
{
cin>>did;
if(did==1)
{
cin>>i>>j>>k;
a[i][j]=k;
}
else if(did==2)
{
cin>>i>>j;
cout<<a[i][j]<<endl;
}
}
return 0;
}

2.括号序列

该题重在读懂题

注意以下几个要点

1.要依据右括号来判断是否成对

2.若出现([)或[)]这种夹不同括号的情况则要全部自成对(除非里面不同括号已经成对了)

因此从左到右依据右括号判断,还可规避在判断外部括号时,内部括号还不知道有没有成对的问题

#include<bits/stdc++.h>
using namespace std;
int b[10000]={0};
int main(void)
{
char a[10000];
cin>>a;
int l=strlen(a);
for(int i=0;i<l;i++)
{
//从右括号判断是否成对,是则在b数组中对应变成1
if(a[i]==')')
{
for(int j=i-1;j>=0;j--)
{
if(a[j]=='['&&b[j]==0)break;
else if(a[j]=='('&&b[j]!=1)
{
b[i]=1;
b[j]=1;
break;
}
}
}
else if(a[i]==']')
{
for(int j=i-1;j>=0;j--)
{
if(a[j]=='('&&b[j]==0)break;
if(a[j]=='['&&b[j]!=1)
{
b[i]=1;
b[j]=1;
break;
}
}
}
}
//输出
for(int i=0;i<l;i++)
{
if(b[i]==1)cout<<a[i];
else
{
if(a[i]=='(')cout<<"()";
else if(a[i]=='[')cout<<"[]";
else if(a[i]==']')cout<<"[]";
else cout<<"()";
}
}
return 0;
}

3.后缀表达式

以堆栈的方式将数字储存进数组里

#include<bits/stdc++.h>
using namespace std;
int a[1005];//a的作用类似于栈
int main()
{
char c;
//now存数,i记a中数字个数
int i=0,now=0;
while(cin>>c&&c!='@'){
if(c>=48&&c<=57)
{
now*=10;
now+=c-48;
}
//存数,以类似堆栈的方式存到a数组里
else if(c=='.')
{
i++;
a[i]=now;
now=0;
}

如果碰到运算符则把最上面两数进行相应的运算

然后把值存到前一个数的位置上

        else if(c=='+')//计算
{
a[i-1]=a[i-1]+a[i];
a[i]=0;
i--;
}
else if(c=='-')
{
a[i-1]=a[i-1]-a[i];
a[i]=0;
i--;
}
else if(c=='*')
{
a[i-1]=a[i-1]*a[i];
a[i]=0;
i--;
}
else if(c=='/')
{
a[i-1]=a[i-1]/a[i];
a[i]=0;
i--;
}
}

最终留在a[1]上的就是结果

4.队列安排

该题若直接用数组,那么每有一个人插入,那么其插入位置后的所有人都要往后移一位,数据可能会爆

但通过观察发现,插入一个人时,除了其插入的位置,其他人的相对位置是不变的

那么就可以抽象为一个路径问题,比如原路径为a->b->d->c,在a右侧插入一个e

则路径变为a->e->b->d->c,b、d、c的顺序没变

删除掉e则变回原路径

因此用增减路径点的思路来做这个题


#include<bits/stdc++.h>
using namespace std;
struct w
{
int l,r;
} ab[100005];
int main(void)
{
int n,p,k,m;
cin>>n;
//初始化0,1的路径,这里固定了最后一位的右边一定是0
ab[0].l=0;
ab[0].r=1;
ab[1].r=0;
ab[1].l=0;
for(int i=2;i<=n;i++)
{
cin>>k>>p;
//在k的p侧增加一个i路径点
if(p==0)
{
ab[i].r=k;
ab[i].l=ab[k].l;
ab[k].l=i;
ab[ab[i].l].r=i;
}
else
{
ab[i].r=ab[k].r;
ab[i].l=k;
ab[k].r=i;
ab[ab[i].r].l=i;
}
}
//删去m个路径点
cin>>m;
for(int i=0;i<m;i++)
{
int a;
cin>>a;
if(ab[a].l==0&&ab[a].r==0)continue;
else
{
ab[ab[a].r].l=ab[a].l;
ab[ab[a].l].r=ab[a].r;
ab[a].l=0;
ab[a].r=0;
}
}
for (int i=ab[0].r;i!=0;i=ab[i].r)cout<<i<<' ';
return 0;
}

week3题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. 个人作业-Week3

    个人作业-Week3 1. 软件工程师的成长 同学们在上这门课的时候,还是大三,你的困难和迷茫,别人一定有过.请看看别人怎么学习的,有些是科班,有些是野路子,有些成功,有些失败. 请读完下面所有博客( ...

随机推荐

  1. 假设业务需要,在页面一屏中一次性展示大量图片(100张),导致img组件同时发起大量的请求,导致浏览器性能被消耗殆尽,页面卡死。怎么优化?

    1.所有图片先提供占位图2.懒加载思想3.使用队列的方式4.通过信号量的机制,结合队列.例如设置可用资源数为10,则保证同一时刻,只有10张图片正在请求,其它图片处于loading状态,任意图片请求完 ...

  2. mysql8.0修改密码

    把密码设置为空:UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost'; 查看USE ...

  3. nodejs发布cesium问题,其他电脑访问发布

    在电脑上安装nodejs后在选择的cesium文件中,按住shift和鼠标右键,打开powershell,输入命令行hs -p 1212,完成cesium的发布,出现两个网址,127.0.0.1:12 ...

  4. 2022-3-14内部群每日三题-清辉PMP

    1.开发一款银行零售业务新产品的项目正在进行中,由于团队成员缺乏激励,该项目落后于进度.项目经理应该如何激励项目团队? A.提供认可与奖励 B.使用教练和指导技能 C.委托职责 D.应用创造性的问题解 ...

  5. C++ 手动实现单向循环链表(课后作业版)

    单向循环链表,并实现增删查改等功能 首先定义节点类,类成员包含当前节点的值, 指向下一个节点的指针 循环链表的尾节点指向头节点 节点定义: //node definition template < ...

  6. c语言中位运算符及用法 异或

    a&b:  00000000 00000000   a&b=0x0 a|b : 00000000 01011111   a|b=0x5f a^b : 00000000 01011111 ...

  7. Coursera Programming Languages, Part C 华盛顿大学 Week 2

    week 2 我们采用一种新的视角来对比 FP 与 OOP,即将问题分解 (decompose) 与实现 (implement) 的方式 OOP Versus Functional Decomposi ...

  8. SQL 用 in 大于 1000 问题解决

    -- 今天生成环境数据突然多,系统异常 解决方案(必须用in 业务情况),也可以用其他函数解决 union all  或者 exists 等 1:截取list List<Integer>  ...

  9. JavaWeb-动力节点

    目录 项目名 src |---- Servlet webapproot |------WEB-INF |------classes(存放字节码) |------lib(第三方jar包) |------ ...

  10. 碧血剑—新修版<随笔+剧情大纲>

    明末,袁崇焕含冤而死,其子袁承志为部下相救,称为山宗,其时10岁左右,机缘巧合之下救下杨鹏举和张朝唐一行.随后山宗大会,明军来攻,在朱国治,孙仲寿等人保护下逃走,学得伏虎拳.遇到安大娘,安小惠和哑巴, ...