vector初始化

2019 ICPC 上海

拟墨画扇 提交于 2019-11-29 16:56:14
摸了一整场的鱼,签了个到,做了个FFT还忘记初始化赛后才发现 B.00:16:52 solved by hl 很显然前缀和搞搞就行了,但是卡O(N),要O(M) #include <map> #include <set> #include <ctime> #include <cmath> #include <queue> #include <stack> #include <vector> #include <string> #include <bitset> #include <cstdio> #include <cstdlib> #include <cstring> #include <sstream> #include <iostream> #include <algorithm> #include <functional> using namespace std; #define For(i, x, y) for(int i=x;i<=y;i++) #define _For(i, x, y) for(int i=x;i>=y;i--) #define Mem(f, x) memset(f,x,sizeof(f)) #define Sca(x) scanf("%d", &x) #define Sca2(x,y) scanf("%d%d",&x,&y) #define Sca3

Day-09-动态规划 Leetcode-70, 198, 53, 32, 120, 300, 64, 174

房东的猫 提交于 2019-11-29 15:13:12
目录 例一:LeetCode70 例二:LeetCode198 例三:LeetCode53 例四:LeetCode32 例五:LeetCode120 例六:LeetCode300 例七:LeetCode64 例八:LeetCode174 例一:LeetCode70 /** You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? */ #include <stdio.h> #include <vector> class Solution { public: int climbStairs(int n) { std::vector<int> dp(n + 3, 0); // 创建长度为n + 3的数组,初始化为0 dp[1] = 1; dp[2] = 2; for (int i = 3; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } return dp[n]; } }; int main() { Solution solve; printf("%d\n",

Day-07-哈希表和字符串 Leetcode-409, 290, 49, 3, 187, 76

核能气质少年 提交于 2019-11-29 15:12:57
目录 例一:LeetCode409 例二:LeetCode290 例三:LeetCode49 例四:LeetCode3 例五:LeetCode187 例六:LeetCode76 // //最简单的哈希,字符哈希 #include <stdio.h> #include <string> int main() { int char_map[128] = { 0 }; std::string str = "abcdefgaaxxy"; for (int i = 0; i < str.length(); i++) { char_map[str[i]]++; } for (int i = 0; i < 128; i++) { if (char_map[i] > 0) { printf("[%c][%d] : %d\n", i, i, char_map[i]); } } return 0; } //利用哈希表排序整数 时间复杂度为O(表长 + n)n为元素个数 #include <stdio.h> int main() { int random[10] = { 999, 1, 444, 7, 20, 9, 1, 3, 7, 7 }; int hash_map[1000] = { 0 }; for (int i = 0; i < 10; i++) { hash_map[random[i]]++;

Day-04-递归、回溯与分支 Leetcode-78, 90, 40, 22, 51, 315

余生长醉 提交于 2019-11-29 15:10:17
目录 例一:LeetCode78 例二:LeetCode90 例三:LeetCode40 例四:LeetCode22 例五:LeetCode51 例六:LeetCode315 //将链表中的节点push进vector #include <stdio.h> #include <vector> struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(NULL) {} }; void add_to_vector(ListNode* head, std::vector<int>& vec) { if (head == NULL) return; vec.push_back(head->val); add_to_vector(head->next, vec); } int main() { ListNode a(1); ListNode b(2); ListNode c(3); ListNode d(4); ListNode e(5); a.next = &b; b.next = &c; c.next = &d; d.next = &e; std::vector<int> vec; add_to_vector(&a, vec); for (int i = 0; i < vec.size(); i++)

String和Vector--C++复习(2)

大憨熊 提交于 2019-11-29 14:17:53
一、命名空间的用法 关键字namespace;用法: //声明命名空间 namespace MyNs { int a; void f1(); class per{ public: void f2(); } } //定义命名空间的函数 void MyNs::f1(){ **** } //实现命名空间的类 void MyNs::per::f2(){ **** } 二、string字符串 需要包含头文件<string> 1.字符串的读写: 1 string s; 2 cin>>s;//遇到空格终止 3 cout<<s<<endl; 2.如何读一整行(循环读写): 1 //循环读入若干字符串,遇到指定退出 2 string s; 3 while(cin>>s){ 4 cout<<s<<endl; 5 if(s=="bye"){ 6 break; 7 } 8 } 9 10 //getline读写 11 string s; 12 while(getline(cin,s)){ 13 cout<<s<<endl; 14 if(s=="bye"){ 15 break; 16 } 17 } 3.字符串的操作 1 //判断字符串是否为空 2 string s; 3 bool result=s.empty(); 4 5 //获得字符串长度 6 string s; 7 int size=s.size();

leetcode刷题记录---19.9.13

北战南征 提交于 2019-11-29 13:24:44
概述 1.数组中的第k个最大元素,利用快排的partition思想,加上二分检索 2.比特位计数,直观的方法时间复杂度为o(n*sizeof(int)),有效降低时间复杂度的方法是判断当前数字的奇偶性,再与前一个联系,得出结论。 3.最长上升子序列,动态规划o(n^2),贪心+二分o(nlogn)。维护一个数组,新进来的如果比数组最后的大,插在后面,否则找到第一个比新进来的大的元素,替换掉他。这个查找是属于有序数组中的查找,可以采用折半查找。 4.根据身高重建队列,这题先根据身高和人数排序(用到了sort的复杂排序,自定义排序规则)。然后再根据人数往数组中的合适位置插。 5.寻找重复数,o(logn)使用二分查找,判断左右数字出现的个数。 6.环形链表,查找链表的环的入口。两种方法unordered_set和快慢指针。快慢指针主要是推导公式,证明,为什么A = (n-1)(B+C)+C 1. 数组中第k个最大元素 ,一遍过,莫名其妙 题目描述:给定一个无序数组,找出这个数组中第k大的数字。 思路:快排的Partition函数 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 class Solution { public: void swap(int& a,int& b

【算法总结】动态规划 (Dynamic Programming)

試著忘記壹切 提交于 2019-11-29 10:08:50
[算法总结] 动态规划 本文组织结构如下: 前言 最长公共子序列(LCS) 最长不下降子序列(LIS) 最大连续子序列之和 最长回文子串 数塔问题 背包问题(Knapsack-Problem) 矩阵链相乘 总结 前言 在学过的算法当中,DP给我的感觉是最难的了。借着本次写blog好好复习一下这个算法。 众所周知,DP算法的关键点: 抽象出问题的状态表示 定义状态转移方程 填表顺序 最长公共子序列 最长公共子序列(Longest Common Subsequence,LCS),顾名思义,是指在所有的子序列中最长的那一个,子序列要求都出现过并且出现顺序与母串保持一致。 例如,给定字符串 a 和 b : string a = "cnblog" string b = "belong"; blog 都出现过,且字母顺序一致,那就一个公共子序列(在这里也是最长的公共子序列)。 状态定义: dp[i, j] 表示 a[0,...,i] 与 b[0,...j] 的最长公共子序列的长度 那么现在的目的就是求出: dp[alen, blen] 状态转移方程: = 0 if i=0 or j=0 dp[i,j] = dp[i-1,j-1]+1 if a[i]=b[j] = max(dp[i-1,j], dp[i, j-1]) if a[i]!=b[j] 观察可知,每一个 dp[i,j] 都是依赖于

Android面试常见题目总结

烈酒焚心 提交于 2019-11-29 09:38:31
1.a=1 b=2 怎么在不使用第三个变量的情况下 使ab的值互换 先看看使用第三变量的方法: public class Swap{ public static void main(String[] args){ int a = 3; int b = 5; int c = a; //把a的值先存到c a = b; //把b存给a b = c; //把存在c的值倒赋给b System.out.println("a="+a); System.out.println("b="+b); } } 总结一下不使用第三变量的方法: public class Change { public void changeMethodA(int a, int b){ System.out.println("交换之前\ta:"+a+"\tb:"+b); a = a + b - (b = a); System.out.println("交换之后\ta:"+a+"\tb:"+b); } public void changeMethodB(int a, int b){ System.out.println("交换之前\ta:"+a+"\tb:"+b); b = a + (a = b)*0; System.out.println("交换之后\ta:"+a+"\tb:"+b); } public void

2019 ICPC上海赛区 M Blood Pressure Game 血压游戏

只谈情不闲聊 提交于 2019-11-29 06:39:46
血压游戏,实质名归好吧233333~ 代码时间是 2019-11-23 18:34:27 一个标点符号我都没有修改,贴在这里了。 不排除有错误,我也真的没有再检查过了。 询问了出题组包括bin巨,他们同意我把标程发过来。 我觉得很有可能会被发现哪里写得有问题,但是能学到知识不是美滋滋吗 ~ 而且确实也没有影响比赛结果。问心无愧。 // #include <bits/stdc++.h> #include<stdio.h> #include<iostream> #include<string> #include<string.h> #include<set> #include<map> #include<vector> #include<queue> #include<algorithm> #include<time.h> using namespace std; #define FMS(x, y, g) memset(x, y, sizeof(x[0]) * (g)) typedef long long LL; // Variables For the Specific Problem const bool GUESS = false; // 是否验证一些猜想(如点数、边数等)的开关 const bool DEBUG = false; // 是否输出细节(用于调试)的开关 //

2019 ICPC上海赛区 M Blood Pressure Game 血压游戏

百般思念 提交于 2019-11-29 06:38:49
血压游戏,实质名归好吧233333~ 代码时间是 2019-11-23 18:34:27一个标点符号我都没有修改,贴在这里了。 不排除有错误,我也真的没有再检查过了。询问了出题组包括bin巨,他们同意我把标程发过来。 我觉得很有可能会被发现哪里写得有问题,但是能学到知识不是美滋滋吗 ~ 而且确实也没有影响比赛结果。问心无愧。 // #include <bits/stdc++.h> #include<stdio.h> #include<iostream> #include<string> #include<string.h> #include<set> #include<map> #include<vector> #include<queue> #include<algorithm> #include<time.h> using namespace std; #define FMS(x, y, g) memset(x, y, sizeof(x[0]) * (g)) typedef long long LL; // Variables For the Specific Problem const bool GUESS = false; // 是否验证一些猜想(如点数、边数等)的开关 const bool DEBUG = false; // 是否输出细节(用于调试)的开关 //