1.1语法基础
P一大堆基础题
就…没啥好说的
非常的普通,放在div3都当不了A的题。除了我自己犯唐之外基本不会
值得记录的只有一个看到的题解使用字符串流做数据处理
P1980计数问题
引入一个新库sstream,主要实现就是字符串流,与C语言中的sscanf,sprintf对应。
具体的,将所有数字依次读入字符串流,转换为字符串,最后使用计数函数即可。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
stringstream ss;
for (n++; --n; ss << n); //把1-n的值都存放到字符串流中
string s = ss.str();
cout << count(s.begin(), s.end(), x + '0') << endl;
return 0;
}
字符串流类似于队列,为一种单向进入的数据结构,常用函数如下
-
std::istringstream::str()
:获取或设置内部字符串。 -
std::istringstream::clear()
:清除错误标志。 -
std::istringstream::eof()
:检查是否到达文件末尾。 -
std::istringstream::fail()
:检查是否发生错误。 -
std::istringstream::good()
:检查是否一切正常。 -
std::istringstream::ignore()
:忽略输入流中的字符。 -
std::istringstream::peek()
:查看下一个字符,但不提取。 -
std::istringstream::get()
:提取一个字符。 -
std::istringstream::getline()
:提取一行。
1.2 数组
P1047校门外的树
发现了一点遗漏,使用差分数组维护区间修改。
平时不会这么写,所以有些想不起来。
对区间[l,r]加x,则在差分数组s[l]+x,s[r]-x即可。然后进行一次累加即可。
这种离线操作虽然但是因为不能反复查询不太好使,但是修改成本为O(1)非常的快。