首页 > TAG信息列表 > ++
NOIP 2018 普及组初赛试题阅读程序解析
第 18 题 阅读程序写结果: #include<stdio.h> char st[100]; int main() { scanf("%s", st);//输入一个字符串 for (int i = 0; st[i]; ++i) { if (‘A’ <= st[i] && st[i] <= ‘Z’)//如果是大写字母,执行指令 st[i] += 1;//往后退一位(如A变成B,B变成C) }//是小优先级以及i++
#include <stdio. h> int fun( int a ) { int b = 0; static int c = 3; a = ( c + +,b + + ); return ( a ); } main( ) { int a = 2,i,k; for( i = 0;i<2;i + + ) k =(*p)++和*(p++)和*p++的区别
(*p)++和*(p++)和*p++的区别 前缀递增递减和*优先级相同,从右到左; 后缀递增递减比前缀优先级高,从左到右。 比如: 1 2 int arr[5] = { 1,3,5,7,9 }; int *p = arr; *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该稀疏数组
稀疏数组 当一个数组中大部分元素为0,或者为同一数值到时候,可以用稀疏数组来进行保存。 稀疏数组的处理方式是: 记录数组一共有几行几列,有多少个不同值。 把具有不同值的元素和行列以及值记录在一个小规模的数组中,从而缩小程序的规模。 直接举个例子: int[][] array1 = new i[AcWing 785] 快速排序
第一篇博客诶!!! 点击查看代码 #include<iostream> using namespace std; const int N = 100010; int n; int q[N]; void quick_sort(int q[], int l, int r){ if(l >= r) return; //只有一个数或者没有数时则不用去遍历了 //int x = q[l]; //会超时 有两组数据CF1728C Digital Logarithm #E135(div.2)
原题链接 https://codeforces.com/problemset/problem/1728/C 这是一道 $ 1400$ 的题目 题意 定义\(f(x) = x\)在10进制下的位数,比如\(f(10)=2, f(233)=3\)。 给定2个长度为 \(n\) 的数组 \(a\) , \(b\) 给定操作,从数组 \(a\) 或者 \(b\) 中,选择一个元素 \(x\),将它修改为 \(f(x)\)最小表示法
以下内容只要来自 OI Wiki 定义 最小表示法是用于解决字符串最小表示问题的方法。 字符串的最小表示 循环同构 当字符串S中可以选定一个位置i满足 \[S[i\cdots n]+S[1\cdots i-1]=T \]则成S与T循环同构 例如:1234的循环同构为:2341 3412 4123 最小表示 字符串S的最小表示为与S循28
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 template<class T,class Pred> 5 void MyForeach(T *p,T *q,Pred op){ 6 while(p != q){ 7 op(*p); 8 ++ p; 9 } 10 } 11 void Print(string s) 1229
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 template<class T,class Pred> 5 T* Filter(T* p,T* q,T* s,Pred op){ 6 while(p < q){ 7 if(op(*p)){ 8 *s = *p; 9 ++ s; 1032
1 #include <iostream> 2 #include <string> 3 #include <cstring> 4 using namespace std; 5 template <class T> 6 class myclass { 7 private: 8 T* p; 9 int size; 10 public: 11 myclass(T* _p,int _size = 0):size(_sizKMP,Trie,&&洛谷P2580
KMP: 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6+5; 4 char a[maxn],b[maxn],aa[maxn],bb[maxn]; 5 //aa,bb为输入的字符串 6 //为了方便KMP的实现 7 //另开a,b两个字符串为实际操作自符串 8 //b为模式串 9 int nxt[maxn],cx[maxn]; 10 //acwing1944.记录保存
acwing.1944记录保存 原题链接:https://www.acwing.com/problem/content/1946/ 思路 将三头牛放到一个vector里,然后用哈希表来记录出现的次数 代码 #include<iostream> #include<cstring> #include<algorithm> #include<map> #include<vector> using namespace std; int main()题解 洛谷CF633D Fibonacci-ish
注意:这是博客文章的随笔同步版本,原版本(也是原创)请观望https://www.cnblogs.com/ryan1015/articles/16686452.html CF633D Fibonacci-ish 博客食用 这是蒟蒻的第一篇题解 题意: Yash最近迷上了 fibonacci数列,他定义了一种数列叫 fibonacccccci 数列: 这个数列包含至少 \(2\) 个元素桶排序C语言代码
#include <iostream> #include <cstdio> using namespace std; int a[1001], num, n, cnt=0; int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> num; a[num]++; if (a[num]关于双端队列初始边界
关于双端队列初始边界 首先要声明一下,deque默认左闭右开,也就是入队时q[tail++] = x的形式。有点反人类 我总结出的规律如下。可能是错的 分两种情况讨论: 情况1:要求队列里必须要有两个点,比如凸包需要访问q[tail]和q[tail - 1],这种情况用STL太麻烦了。 情况2:要求队列里有一个点就够螺旋矩阵
螺旋矩阵Ⅱ 题目链接 代码随想录的解答非常清晰,这里贴上: 相信很多同学刚开始做这种题目的时候,上来就是一波判断猛如虎。 结果运行的时候各种问题,然后开始各种修修补补,最后发现改了这里那里有问题,改了那里这里又跑不起来了。 求解本题一定要坚持循环不变量原则。 模拟顺时针画矩阵034:goodcopy
1 #include <iostream> 2 using namespace std; 3 4 5 template <class T> 6 struct GoodCopy { 7 // 在此处补充你的代码 8 void operator()(T* p,T* q,T* r){ 9 int n = q - p; 10 while(n + 1){ 11 *(r + n) = *q; 12C++实现真值表
这一片文章主要是关于真值表,在完成之前我也遇到了许多问题。比如怎么去求解表达式的值,怎么去将每个变量进行赋值,也就是如何 将n个字符进行01全排列。 01全排列真的神奇,01全排列其实就是2^n。他可以表示全部的01,真是神奇。 怎么去判断表达式的值呢?我们可以分步骤: 1洛谷 P4137 Rmq Problem mex 莫队 + 值域分块
Rmq Problem / mex 题目描述 有一个长度为 \(n\) 的数组 \(\{a_1,a_2,\ldots,a_n\}\)。 \(m\) 次询问,每次询问一个区间内最小没有出现过的自然数。 输入格式 第一行,两个正整数 \(n,m\)。 第二行,\(n\) 个非负整数 \(a_1, a_2, \ldots , a_n\)。 接下来 \(m\) 行,每行两个正整数 \(l,leetcode977(双指针)
mycode: class Solution { public: vector<int> sortedSquares(vector<int>& nums) { int n = 100000; int x = 0; for(int i=0;i<nums.size();i++){ if(abs(nums[i])<n){Educational Codeforces Round 134 D
D. Maximum AND 可以很轻松通过^和& 两个操作看出 我们要求的两个序列每一位上的1加起来必须等于n才行 多一个少一个都不行 然后1加起来等于n 0自然加起来也等于n 0和1的数量相等 但是直接每一位算肯定是不对的 因为会有有些组不同 比如样例1 我们考虑按位贪心 让后面的组要是和前Rock and Lever
题意: 找出数列中满足,ai & aj >= ai ^ aj 的 (i,j)的数量,i<j 由样例发现,当ai 与 aj 的最高位一样时,不等式就成立 故,记录数的最高位的数目,假设一个最高位的数目为x,则能选,C(n,2)种 得到一个数的二进制的最高位,不断右移即可。 处理组合数即可。又:C(n,2)=(n/2)*C(n-1,1)=n*(n-1)/2.字符串入门学习笔记
字符串哈希 idea 将字符串映射成一个数值(称为哈希值),因此可以在O(1)时间内做到例如判断两个串是否相等这样的事情,优化了时间复杂度 注意,哈希值不同时字符串一定不同;哈希值相同时字符串可能不同,称为冲突 发生冲突的概率是很小的 (how?待补充) 应用 解决字符串匹配问题 求最长回文子串(【链表、队列】约瑟夫环问题
3253. 游戏 #include <iostream> #include <queue> using namespace std; int n, k; bool check(int x) { if (x % k == 0 || (x % 10) == k) return true; return false; } int main() { cin >> n >> k; queue<int> q;editplus + notepad++ 列编辑操作
列编辑 //编辑器列选择 EditPlus 1)菜单:编辑 -> 选择 -> 列选择(Edit->Select->Column Select) 2)先按下 Alt + C ,释放,然后移动鼠标或键盘上下左右键进行列模块的移动 注意:在自动换行的模式下是不行的,改为不自动换行就行了。 Notepad++ 1)按住 Alt 键,然后用鼠标进行选择 2)按住 Alt