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

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. 【记录】linux 文件权限的查看和修改

    从上图可以看出每个文件权限与类型都是不一样的,如果对各个字母表达的含义不了解,那么看的真是一脸懵逼. 别急,具体解释如下: d rwx  rwx  rwx -  rwx  r--  rw- 第一列含义 ...

  2. 创建Uboot 环境变量 bin 文件

    As we know, the bootloader stores its configuration into an area of the flash called the environment ...

  3. 图形设计 X11

    显示适配器驱动程序安装范例 AMD驱动加载 Intel驱动加载

  4. JS中的call()和apply()方法(转)

    转自:http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类: JS   1.方法定义 call方法: 语法:call([thisOb ...

  5. mongodb C#连接报错 Invalid credentials for database 'admin'

    这2天学习mongodb3.2.9,用户设置好了,结果用C#查询的时候报错了,看字面意思是用户验证没通过,但是我用shell是完全没有问题的,后来网上搜了下,发现原来是我用的是旧驱动,旧驱动用的是旧的 ...

  6. (PASS)PLSQL激活

    注册码: Product Code(产品编号):4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number(序列号):601769 password(口令):xs ...

  7. Java网络编程:OSI七层模型和TCP/IP模型介绍

    OSI(Open System Interconnection),开放式系统互联参考模型 .是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路 ...

  8. windows系统下MySQL中遇到1045问题

    报错内容为"1045    Access denied for user 'root'@'localhost' (using password:YES)",对应的原因是密码错误,如 ...

  9. jquery实现左侧菜单 效果

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  10. atexit函数学习

    函数名: atexit 头文件:#include<stdlib.h> 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: void atexit(void (*func)( ...