任务说明:数组,链表,队列,栈,都是线性结构。巧用这些结构可以做出不少方便的事情。

P1996 约瑟夫问题

n个人,排成环形,喊到m的人出列,输出出列顺序。

咳咳,这个题目不好写,尽管简单就是模拟题...但是orz 乱七八糟加上debug的时间一共花了四十多分钟....

 #include <iostream>
#include <cstdio>
#include <vector>
#include <climits>
#include <stack>
#include <string>
using namespace std; const int INF = ;
int main () {
int n, m;
cin >> n >> m;
vector<int> vec(n+, );
vec[] = INF;
int out = , ptr = , number = ;
while(out < n) {
if (ptr > n) { ptr = ptr % n; }
if (number == m) {
/*
if (vec[ptr] == INF) {
cout << "\nexception \n";
printf("ptr[%d]\n", ptr);
for (int ele = 0; ele <= n; ++ele) {
printf("%5-d", ele);
}
printf("\n");
for (auto ele : vec) {
printf("%5-d", ele);
}
cout << endl;
return 0;
}
*/
cout << ptr << " " ;
number = ;
vec[ptr] = INF;
++out;
} else {
//printf("=======debug========number[%d], ptr[%d]\n", number, ptr);
++ptr;
if (ptr > n) { ptr = ptr % n; }
while(vec[ptr] == INF) {
++ptr;
if (ptr > n) { ptr = ptr % n; }
}
++number;
}
}
if (out) {
cout << endl;
}
return ;
}

有空看看题解优化下代码..

P1115 最大子段和

做了这个题才颠覆了我对最大字段和的认识。

以前默认的解法就是用dp[i] 表示 a[0..i] 的和,然后用二重循环相减,求出最大子段和。

提交了发现才过了两个点,剩下的三个点TLE。

然后看了题解才发现原来可以这么做:就是用一个变量来记录读进来数字的当前子段和,如果发现这个变量(当前子段和)比零小,那么就把它置0。因为后面那一坨不论是啥,前面加个负数都不划算,所以这么解最优。

时间复杂度O(N), 空间复杂度O(1)

 #include <iostream>
#include <cstdio>
#include <vector>
#include <climits>
using namespace std; int main () {
int n;
cin >> n;
int ans = INT_MIN, dp = ;
for (int i = ; i <= n; ++i) {
int x;
cin >> x;
if (i == ) {
dp = ans = x;
} else {
dp = dp + x > ? dp + x : x;
}
ans = max(ans, dp);
}
cout << ans << endl;
return ;
}

P1739 表达式括号匹配

简单题,不用复习,就是给个字符串,判断左右括号是否匹配。字符串没有空格隔开,直接cin就好。

提交一次AC了。

 #include <iostream>
#include <cstdio>
#include <vector>
#include <climits>
#include <stack>
#include <string>
using namespace std; int main () {
stack<char> stk;
string str;
cin >> str;
for (auto ele : str) {
if (ele == '@') {
if (stk.empty()) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return ;
}
if (ele == '(') {
stk.push(ele);
}
if (ele == ')') {
if (stk.empty()) {
cout << "NO" << endl;
return ;
}
stk.pop();
}
}
return ;
}

队列安排

P1449 后缀表达式

后缀表达式求值,用栈做。注意- 和/的时候top出来的两个变量顺序。要是考到,直接用个减法当例子。

提交一次AC了。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <climits>
#include <stack>
#include <string>
#include <sstream>
using namespace std; int getNextOper(string& str, int& idx) {
string strOper;
for (int i = idx; i < str.size(); ++i) {
if (str[i] == '.') {
idx = i + ;
break;
}
if (!isdigit(str[i])) {
printf("exception\n\n");
exit(-);
}
strOper += str[i];
}
stringstream ss(strOper);
int ans;
ss >> ans;
return ans; } int main () {
stack<int> stk;
string str;
cin >> str;
int startIdx = ;
int iOper = getNextOper(str, startIdx);
stk.push(iOper); int answer = ;
while (str[startIdx] != '@') {
if (isdigit(str[startIdx])) {
int iOper = getNextOper(str, startIdx);
stk.push(iOper);
} else {
if (stk.size() < ) {
printf("exception \n\n");
}
int a = stk.top(); stk.pop();
int b = stk.top(); stk.pop();
if (str[startIdx] == '+') {
answer = a + b;
}
if (str[startIdx] == '-') {
answer = b - a;
}
if (str[startIdx] == '*') {
answer = a * b;
}
if (str[startIdx] == '/') {
answer = b / a;
}
startIdx++;
stk.push(answer);
}
}
cout << stk.top() << endl;
return ;
}

【Luogu】【关卡2-13】线性数据结构(2017年10月)【还差一道题】的更多相关文章

  1. 【Luogu】【关卡2-6】贪心(2017年10月)

    任务说明:贪心就是只考虑眼前的利益.对于我们人生来说太贪是不好的,不过oi中,有时是对的. P1090 合并果子 有N堆果子,只能两两合并,每合并一次消耗的体力是两堆果子的权重和,问最小消耗多少体力. ...

  2. 【Luogu】【关卡2-3】排序(2017年10月) 【AK】

    任务说明:将杂乱无章的数据变得有规律.有各种各样的排序算法,看情况使用. 这里有空还是把各种排序算法总结下吧.qsort需要会写.. P1177 [模板]快速排序 这个题目懒得写了,直接sort了.. ...

  3. 欢迎来怼-Alpha周(2017年10月19)贡献分配规则和分配结果

    .从alpha周(2017年10月19日开始的2周)开始,提高贡献分比重. 贡献分 : 团队分 = 1 : 5 教师会在核算每位同学总分时按比例乘以系数. 每位同学带入团队贡献分10分,如果团队一共7 ...

  4. 2017年10月31日结束Outlook 2007与Office 365的连接

    2017 年10月31日 ,微软即将推出 Office 365中Exchange Online邮箱将需要Outlook for Windows的连接,即通过HTTP Over MAPI方式,传统使用R ...

  5. 江西省移动物联网发展战略新闻发布会举行-2017年10月江西IDC排行榜与发展报告

    编者按:当人们在做技术创新时,我们在做“外包产业“:当人们在做制造产业,我们在做”服务产业“:江人们在做AI智能时,我们在做”物联网“崛起,即使有一个落差,但红色热土从不缺少成长激情. 本期摘自上月初 ...

  6. 【Luogu】【关卡2-16】线性动态规划(2017年10月)【还差三道题】

    任务说明:这也是基础的动态规划.是在线性结构上面的动态规划,一定要掌握. P1020 导弹拦截 导弹拦截 P1091 合唱队形 老师给同学们排合唱队形.N位同学站成一排,音乐老师要请其中的(N-K)位 ...

  7. 【Luogu】【关卡2-14】 树形数据结构(2017年10月)【AK】

    任务说明:由一个根节点分叉,越分越多,就成了树.树可以表示数据之间的从属关系 P1087 FBI树 给一个01字符串,0对应B,1对应I,F对应既有0子节点又有1子节点的根节点,输出这棵树的后序遍历. ...

  8. 【Luogu】【关卡1-8】BOSS战-入门综合练习2(2017年10月)【AK】------都是基础题

    P1426 小鱼会有危险吗 我个人觉得这个题目出的不好,没说明白,就先只粘贴的AC代码吧 #include <bits/stdc++.h> using namespace std; int ...

  9. 【Luogu】【关卡2-15】动态规划的背包问题(2017年10月)【还差一道题】

    任务说明:这是最基础的动态规划.不过如果是第一次接触会有些难以理解.加油闯过这个坎. 01背包二维数组优化成滚动数组的时候有坑有坑有坑!!!必须要downto,downto,downto 情景和代码见 ...

随机推荐

  1. SET - 改变运行时参数

    樊伟胜SYNOPSIS SET [ SESSION | LOCAL ] name { TO | = } { value | 'value' | DEFAULT } SET [ SESSION | LO ...

  2. 人生苦短_我用Python_list(列表)_002

    # coding=utf-8 # 列表 list 列表函数 # 列表的特性: 可以有任何类型的值 可以更改 # 可以更改.增加.删除.修改 # 增加 append 直接在尾巴增加 list_1 = [ ...

  3. LC: 404.左叶子节点

    计算给定二叉树的所有左叶子之和. 示例: / \ 9 20 / \ 15 7 ,所以返回 24 解析 我们需要找到这样的节点 属于叶子节点 属于父节点的左子节点 方法一:用栈,dfs遍历,用全局变量r ...

  4. 20175223 MySQL

    目录 完成结果 要求 1 :导入world.sql 要求 2 :CityWanna.java CityWanna.java 要求 3 :CountryWanna.java CountryWanna.j ...

  5. B2C网站的系统

    管理系统 管理系统:主要做业务上的管理和内容输出,常见的有CMS(内容管理系统).CRM.SCM等, 1 供应商作为第三方,有独立开发的系统(SRM)和IO系统对接.以确定订单的状态.当然IO系统里面 ...

  6. 【计算机网络mooc】二、物理层

    1.物理层基本概念 物理层只考虑传输bit流,不包括网线等传输媒体(可认为是第0层),屏蔽传输媒体的差异,不同的传输媒体定义不同标准. 主要任务:确定与传输媒体的接口的特性. 机械特性:网线上面的水晶 ...

  7. 用 Flask 来写个轻博客 (17) — MV(C)_应用蓝图来重构项目

    目录 目录 前文列表 重构目录结构 重构代码 使用蓝图后的路由过程 总结 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World ...

  8. 【消息中间件】kafka

    一.kafka整体架构 kafka是一个发布订阅模式的消息队列,生产者和消费者是多对多的关系,将发送者与接收者真正解耦: 生产者将消息发送到broker: 消费者采用拉(pull)模式订阅并消费消息: ...

  9. Linux命令 uname

    1.简介 管理系统而使用的命令,用于显示系统信息(不同linux版本可能有写差异) 2.语法 uname [-amnrsv] (1) -a,--all 显示所有的信息 (2) -s,--kernel- ...

  10. 6. 使用cadvisor监控docker容器

    Prometheus监控docker容器运行状态,我们用到cadvisor服务,cadvisor我们这里也采用docker方式直接运行.这里我们可以服务端和客户端都使用cadvisor 客户端 1.下 ...