模拟·
S atur
要变成萤火虫~
展开
-
L2-002 链表去重(测试点1的坑)
思路: 通过map映射先将原链表处理出来,再通过判重将其分成两部分存储输出。注意测试点1有个坑点(原链表不是一条完成的链表,数据如下:)(测试点1)输入:00001 300001 1 0000200002 2 -100003 3 00004(测试点1)输出:00001 1 0000200002 2 -1代码实现:#include<bits/stdc++.h>#define int long long#define endl '...原创 2022-04-21 12:13:16 · 1518 阅读 · 2 评论 -
LeetCode - 8 - (三数之和、Z字形变换、两数之和<链表>、盛最多水的容器、电话号码的字母组合)
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { sort(nums.begin(), nums.end()); set<vector<int>> res; //去重 int n = nums.size(); for(int i = 0; i < n; i +...原创 2022-04-08 14:13:40 · 140 阅读 · 0 评论 -
LeetCode - 7 - (二叉树的最近公共祖先、轮转数组、二叉树的直径、下一个排列、组合总和)
class Solution {public: TreeNode* ans; bool dfs(TreeNode* root, TreeNode* p, TreeNode* q){ if(root==NULL) return 0; bool lson = dfs(root->left, p, q); bool rson = dfs(root->right, p, q); if((lson&&am...原创 2022-04-08 13:24:41 · 133 阅读 · 0 评论 -
LeetCode - 6 - (字符串相乘、下一个更大元素<ⅠⅡⅢ>、k个一组翻转链表)
class Solution {public: string multiply(string num1, string num2) { if(num1=="0"||num2=="0") return "0"; int n = num1.size(), m = num2.size(); vector<int> tmp(n+m); for(int i = n-1; ~i; i--){ //相乘计算 ...原创 2022-04-08 10:32:16 · 1202 阅读 · 0 评论 -
LeetCode - 5 - (重复的子字符串<kmp>、最长回文子串、转置矩阵、二叉树的(左右)视图)
朴素做法:O()class Solution {public: bool repeatedSubstringPattern(string s) { int n = s.size(); for(int i = 1; i <= n/2; i ++){ if(n%i==0){ bool flag = 1; for(int j = i; j < n; j ++){...原创 2022-04-04 13:19:03 · 163 阅读 · 0 评论 -
LeetCode - 4 - (接雨水、无重复字符的最长子串、分发糖果、二叉树的<前中后层>序遍历)
class Solution {public: int trap(vector<int>& height) { int len = height.size(); if(!len) return 0; vector<int> lmax(len); lmax[0] = height[0]; //记录当前位置左侧最高值 for(int i = 1; i < len; i ++)...原创 2022-03-29 17:11:35 · 607 阅读 · 0 评论 -
LeetCode -3 - (字符串相加、最大连续1的个数<ⅠⅢ>、考试的最大困扰度、删除链表的倒数第N个结点)
class Solution {public: string addStrings(string num1, string num2) { string ans; if(num1.size()>num2.size()) swap(num1, num2); reverse(num1.begin(), num1.end()); reverse(num2.begin(), num2.end()); int tmp...原创 2022-03-29 15:17:29 · 350 阅读 · 0 评论 -
LeetCode - 2 - (括号生成、最长回文串、环形链表、反转链表、两两交换链表中的节点)
class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode* dummy = new ListNode(0); //开一个动态的链表 dummy->next = head; //表头指向head ListNode* tmp = dummy; while(tmp->next&&tmp->next->next){...原创 2022-03-29 03:22:36 · 1014 阅读 · 2 评论 -
LeetCode - 1 - (树的子结构、组合、螺旋矩阵、全排列<ⅠⅢ>)
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool check(TreeNode*...原创 2022-03-28 21:24:05 · 970 阅读 · 0 评论 -
L1-064 估值一亿的AI核心代码 (20 分) 格式错误
传送门题意: 思路:· 个人思路是先处理原文串a所有空格和大小写变成串b· 再处理串b中的各种替换问题,由于在处理单词替换时虽然先考虑的“I”的替换,但是之后再不会变量到该单词,所以并未出现大家所说的测试点2(can you)的卡顿。·但是特别注意这个题的另外一个坑点,本人就是一直测试点1和测试点4格式错误,后面通过这篇博客的详细讲解才通过了本题。·测试点1:结尾没有标点符号而有多个空格·测试点4:三个空格,要求输出"AI: "即可。AC代码:#inc...原创 2022-03-19 16:50:46 · 486 阅读 · 0 评论 -
1008.Smzzl with Greedy Snake (模拟贪吃蛇) (2021“MINIEYE杯”中国大学生算法设计超级联赛7)
传送门题意:给你贪吃蛇的初始位置以及依次出现的n个食物的坐标位置,'0' '1' '2' '3' 分别表示y轴顺时针表示的四个方向,当前食物被吃掉后才会出现下一食物,因此贪吃蛇必须依次吃掉这n个食物。贪吃蛇无论是向前移动一步还是顺时针/逆时针旋转90°的耗时都是一个时间单位.现需要你找到其最快吃完所有食物的移动方案。'u'表示逆时针旋转90°,'c'表示顺时针旋转90°,'f'表示前进一步。思路:点到点的模拟一下即可,只不过需要注意以下当贪吃蛇的头向和食物为反向时的路径方案最优可以少消耗一个时间..原创 2021-08-15 10:26:53 · 219 阅读 · 0 评论 -
Codeforces B. Partial Replacement (简单模拟)(Round #710 Div.3)
传送门题意:给你一个只有 '.' 和 '*' 组成的长度为n的原始字符串,你可以将其任何一个 '*' 替换成 'X',但需要满足一定条件。条件:①第一个和最后一个 '*' 必须替换,②替换过后字符串中任意两个相邻的 'X' 的下标差不得超过k。要求:求出需要替换的最少 '*' 数。思路:从第一个 '*' 到最后一个 '*' 遍历一遍就好,在遍历的过程中记录上次替换的位置 pre 和上次遇到 '*' 的位置 px ,每过k各位置就替换一次即可。代码实现:import java.u原创 2021-03-26 17:02:22 · 290 阅读 · 0 评论 -
Codeforces A. Alexey and Train (Round #707 Div.2)(简单模拟)
传送门题意:有n个车站,每个车站都有个到达时间、出发时间和到该点前的延迟时间。现让你推算按顺序到达第n个车站所需的时间为多少。思路:挺简单一题,就是题意有点点绕。模拟注意一下每次出发的时间最小休息时间(b[i]-a[i])/2上取整的关系处理即可,就是别忘了两点之间本来就需要花费的时间(b[i]-a[i-1])和到达第i个点前还有个另外的延迟时间c[i]。代码实现:import java.util.Scanner;public class Main { public原创 2021-03-21 01:18:25 · 3010 阅读 · 1 评论 -
Codeforces C. Minimum Grid Path (Round 106 Rated for Div.2) (模拟枚举/前缀(和&最小值))
传送门题意:需要你从从原点(0,0)出发走到平面第一象限中的终点(n,n),你只能向右或向上行走整数步,且过程中最多变换n-1次方向。现在告诉你n段路程分别的平均成本,试找到走到终点的最小消耗。思路:既然最多变换n-1次方向,即我们可以利用完n段线段的成本。于是我们枚举最后一段时在第i次结束(走到终点),注意:这以为这之前 i-1 段路程都是交替变换方向的。对于奇数位置,走到总距离和必须刚好等于n,于是我们找到该奇数位置 i 以及之前的所有奇数位置的最小值,让其走最多的步数,其余的位原创 2021-03-19 12:49:18 · 249 阅读 · 0 评论 -
Codeforces B.Planet Lapituletti (模拟时间&镜像)(Round #705 Div.2)
传送门题意: 星球上的时间制度是每天h小时,每小时m分钟。告诉你现在的时间,需要你找到以后第一个镜像时间——指镜像翻转过后是正确的时间,例如05:11 -> 11:20是个正确时间。思路:n<=100组数据,每组的h,m都在100以内,可以直接暴力枚举。①:首先判断其能够镜像翻转,即只含有0,1,2,5,8这几个数字。②:判断其镜像翻转后的时间hh:mm是正确的(注意2和5的转换),即hh<h&&mm<m(其他的都不行,俺就是在这里错了呜呜)。原创 2021-03-07 10:33:09 · 453 阅读 · 0 评论 -
Codeforces D. Journey (Round 103 Rated for Div.2) (思维 / 模拟 / 暴力扫)
传送门题意: 有一排 0 到 n 的n+1个城市,现给出期间的 n 条道路方向,s[i] 表示第 i 个城市与第 i-1 个城市之间的道路。游客从一个城市向相邻的城市移动后,所有道路都会翻转方向,且每天游客都必须选择一条道路移动。现让你求出以没个城市为起点,都能最多经过多少个不同的城市。思路:要连续通行的道路必须是 "…LRLRLRLRL…"这样交替出现的。往左再往右是毫无意义的,因为经过偶数次翻转后的道路又回到了最初的状态。若要能向左通行,那么当前道路必须是 ‘L’,若要能向右通行, 那么下原创 2021-02-03 10:35:03 · 222 阅读 · 0 评论 -
Codeforces C1. Binary Table (Easy Version) (#684 Div.2) (思维&模拟)
传送门题意: 有一个nm的01矩阵,每次操作可选其中22子矩阵的任意3个元素取反,要求将所有元素变成0,且操作次数在3nm以内(保证存在答案)。输出操作的总次数及每次操作对应的元素下标。思路: 分两个部分处理先暴力处理前(n-1)*m个位置,即每次把’1’放在正反L的’头’(即上一层单出来那个)。再单独处理最后一层,每次都看第j和j+1个位置。将是’11’型,'10’型和最后一个元素’01’型分类讨论。这样修改次数约为n*m+次(最后一行的操作次数较多)。代码实现:#include&原创 2020-11-18 19:46:25 · 258 阅读 · 0 评论