编程思维与实践
第二次测试过了于是剩下的题目就咕咕咕了
JamSlade
这个作者很懒,什么都没留下…
展开
-
课后自主练习(高精度)1082. 猜猜猜 naive《编程思维与实践》个人学习笔记
题目思路显然,长度为1的时候只有一种可能长度为2的时候,如果1、2单词一致,只有一种可能,1、2单词不一致,那就可以有四种可能当长度大于等于2的时候除了s[0]和s[len-1]外,中间的数都得考虑前后的影响于是我们就特别判断一下首位和末尾若s[0] == s[1] 可能的情况为1种s[0]!=s[1]可能的情况为两种对于末尾的情况同理于是我们开始讨论s[1]到s[length-1]的情况倘若是aaa型,那么自然是只有1种符合要求的情况如果是aab,baa,abat,中间可以变a和原创 2021-05-04 21:50:53 · 246 阅读 · 0 评论 -
测试 1119.优雅的括号序列《编程思维与实践》个人学习笔记
题目数据3({[()]}){[()()][()]}[()]{[()]}{()}YesYesNo思路用栈秒了。。判断yes之前记得判断栈是不是空的代码#include <iostream>#include<bits/stdc++.h>#include<algorithm>#include<cstring>#include<cmath>#include<cctype>#include<stdli原创 2021-05-19 18:42:30 · 398 阅读 · 0 评论 -
测试 1118. 最短路径《编程思维与实践》个人学习笔记
题目数据3 33 0 42 1 01 3 48RDRD5 56 7 2 0 28 8 5 4 08 2 8 4 12 2 3 6 88 7 7 6 632RRRRDDDD20 2014 30 33 16 20 24 38 44 0 16 13 7 4 16 15 18 39 45 32 241 42 33 11 48 4 20 13 35 10 38 37 7 38 43 25 13 17 37 936 23 11 24 17 17 14 42 21 4 33 24原创 2021-05-19 18:40:55 · 285 阅读 · 3 评论 -
测试 1117. 下雨《编程思维与实践》个人学习笔记
题目数据2 21 123 22 2 22+2/38 83 2 1 3 3 4 4 54+1/78 73 2 1 3 3 4 4 53+4/5思路卡了一个点,忘记输出带分数的时候整数为0的情况是不用输出0和+号的,不然这次测试就满分了。。还是脑子不太灵光首先记录各个位置的海拔然后用数组al来记录 海拔 == i(i ∈ 【0,max】)的情况不难发现,后一个数加上前一个数就是每增加一个单位的高度需要填满的“沟壑数”最后需要填满的数量单独进行GCD运算即可代码#in原创 2021-05-19 18:38:30 · 284 阅读 · 0 评论 -
测试 1116. 神奇三角形《编程思维与实践》个人学习笔记
题目思路显然考的是高精度。。。不多赘述需要注意的是OJ对自定义类不太兼容,最好在main函数里面写,这样绝对不会有问题代码#include <iostream>#include<bits/stdc++.h>#include<algorithm>#include<cstring>#include<cmath>#include<cctype>#include<stdlib.h>#include<原创 2021-05-19 18:34:01 · 215 阅读 · 0 评论 -
测试 1115. 血型判断 II《编程思维与实践》个人学习笔记
题目思路用map<string,string>来做这个题目最方便了,开两个map分别用来表示血型->遗传因子遗传因子->血型的映射然后穷举所有可能即可(注意排列组合的组合前后顺序)代码#include <iostream>#include<bits/stdc++.h>#include<algorithm>#include<cstring>#include<cmath>#include<cc原创 2021-05-19 18:31:52 · 451 阅读 · 3 评论 -
课后自主练习(implement)1102. 十进制数列项 medium《编程思维与实践》个人学习笔记
题目思路next_permutation了解一下代码#include<bits/stdc++.h>using namespace std;int t,n,c;int main(){ cin>>t; string str; for(c=0;c<t;c++) { cin>>str; if(is_sorted(str.begin(),str.end(),greater<char>原创 2021-05-13 19:12:26 · 166 阅读 · 0 评论 -
测试 1113. 等腰直角三角形《编程思维与实践》个人学习笔记
题目麻了……考试的时候想到法二结果不会写,还是得多总结暴力思路两重for循环固定一个点然后一重for循环固定半径声明SUM剩下两重for循环固定dx和dy累加后判定是否sum>=k即可复杂度O(n⁵)代码#include<iostream>typedef long long ll;using namespace std;ll data[205][205];int main(){ int n,m,k; cin >> n &g原创 2021-04-18 11:09:22 · 334 阅读 · 0 评论 -
测试 1112. 素数进制《编程思维与实践》个人学习笔记
题目思路没啥好说的,普通版解释1012. 素数进制A+B加了个高精度罢了,注意进位加减即可代码#include<iostream>using namespace std;int pri[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149};int DEX[1000];void carry(int原创 2021-04-14 21:05:36 · 236 阅读 · 0 评论 -
测试 1111. 罗马数字《编程思维与实践》个人学习笔记
题目思路题目的“左减限制“和实际给的数据并不统一,给的数据里面只要左边的数字整体比下一个字符小就是-。。。这个考试的时候真的无语。。总体来说这个题目得用栈的思想来进行解题。首先是什么时候要×1000?自然是遇见左括号的时候,遇见右括号再/1000然后把字符都转换好对应的数字,之后遍历所有的数字判定前一个数字是否比后一个数字小,之后累加即可。代码#include<iostream>using namespace std;int R[130];int main(){原创 2021-04-14 20:24:28 · 265 阅读 · 0 评论 -
测试 1110. 最长无重复子串 naive《编程思维与实践》个人学习笔记
题目思路二重循环。。。利用字母表对应来记录字符出现次数,有重复就停止,然后判断不重复子串长度。需要注意的是,第二次循环由于可输出字符只有26+26+10个字符,可以限制每次只考虑62个,这样可以把O(n²)复杂度降低到O(62n)代码#include<iostream>#include<cstring>using namespace std;int alpha[130];int main(){ string s; cin >>原创 2021-04-11 16:36:49 · 156 阅读 · 0 评论 -
测试 1108. Weights naive《编程思维与实践》个人学习笔记
题目思路①递归把所有的数据都进行 + - 不操作三种情况,然后当把所有数据操作完之后,把和>0的情况变成1,最后输出即可代码#include<iostream>#include<cstring>using namespace std;int yes[10000];int data[100];void re(int t, int sum){ if(t == -1) { if(sum > 0)原创 2021-04-11 17:30:12 · 178 阅读 · 0 评论 -
测试 1107. 矩形个数 easy《编程思维与实践》个人学习笔记
题目法一:六重循环#include<iostream>using namespace std;int func(int(*a)[11],int k, int r, int c, int n){ int sum = 0; for(int a1 = 1; a1 <= r; a1++) { for(int a2 = 1; a2 <= c; a2++) { for(int b1 = 1; b1 &原创 2021-03-02 20:59:36 · 185 阅读 · 0 评论 -
测试 1106. 安全驾驶 naive《编程思维与实践》个人学习笔记
思路:把在最后一辆车前的所有车到达目的地所用的时间给算出来,然后排出最大的时间消耗(此处并未考虑在最后一辆车前面所有车超车时候的速度变化)用几个for循环可顺利解决#include<iostream>#include<stdlib.h>#include<limits>using namespace std;//注意初始化问题class car{public: long advance; long remain; long sp..原创 2021-03-02 20:03:33 · 118 阅读 · 0 评论 -
课后自主练习(implement)1104. 数列项 easy《编程思维与实践》个人学习笔记
题目思路第一项默认是0,第二项默认是1,所以直接从第三项开始算即可,i循环第三项到末位项,然后j来循环i之前的所有项,i - j < 0continue即可另外,其实这个题目可以用前缀和进行时间优化需要注意的是 数据超过ull,需要自己写大整数代码#include<iostream>#include<cctype>#include<cstring>typedef long long ll;const int N = 300;using na原创 2021-05-12 19:42:12 · 120 阅读 · 0 评论 -
课后自主练习(implement)1099. 符号方程求解 hard《编程思维与实践》个人学习笔记
题目思路注意开头部分的±号,注意=后面的加减号然后判断每个部分即可最后注意0/-1可能会给你一个负数。。。单独判断代码#include<iostream>#include<bits/stdc++.h>using namespace std;int main(){ string s; cin >> s; stack<char> sig; int len = s.length(); bool t原创 2021-05-11 21:36:20 · 139 阅读 · 0 评论 -
课后自主练习(implement)1096. Light easy《编程思维与实践》个人学习笔记
题目思路就把9个角的变化次数加到对应的临边和自己本身上,然后最后统计是否为偶数,偶数为1 奇数为0即可代码#include<iostream>using namespace std;void func(){ bool b[3][3]; int times[3][3]; for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) {原创 2021-05-13 15:19:19 · 137 阅读 · 0 评论 -
课后自主练习(implement)1095. 神秘单词 naive《编程思维与实践》个人学习笔记
题目详见猜猜猜代码#include<iostream>using namespace std;const int MOD = 1e9+7;typedef long long ll;ll func(string a){ int len = a.length(); if(len == 1) return 1; if(len == 2) return ((a[0] == a[1]) ? 1 : 4); ll r = 1; i原创 2021-05-13 15:21:34 · 129 阅读 · 0 评论 -
课后自主练习(implement)1094. 局部二值 naive《编程思维与实践》个人学习笔记
数据10 825 36 150 43 110 38 99 98 55 7926 98 152 45 44 48 110 39 38 9223 100 120 78 38 63 114 42 120 8922 79 163 140 92 67 67 58 112 4338 78 120 138 98 78 87 69 138 5067 56 123 150 111 89 89 74 129 2544 221 135 222 123 92 90 59 150 2158 220 147 25..原创 2021-05-05 11:09:01 · 142 阅读 · 0 评论 -
课后自主练习(implement)1093. 赛博计算机 2077 naive《编程思维与实践》个人学习笔记
题目数据IN AX,3IN BX,5MUL AX,BXIN CX,2ADD CX,AXIN BX,6DIV DX,CX,BXOUT DXMOD DX,CX,BXOUT DX答案25思路和1092差不多。。。注意字符串负号的转换和find(char c, int pos)可能会返回npos的使用即可代码#include<iostream>using namespace std;string opera[] = {"IN","OUT","MOV","XC原创 2021-05-05 10:36:22 · 270 阅读 · 0 评论 -
课后自主练习(implement)1092. 上古计算机 naive《编程思维与实践》个人学习笔记
题目数据:IN AX,3IN BX,5MUL AX,BXIN CX,2ADD CX,AXIN BX,6DIV CX,BXOUT CX答案 2思路就分类讨论呗。。。用一下substr函数分离操作然后判断,然后switch来对每个情况进行分析即可然后用find来找空格和逗号注意一下IN的时候的负号处理即可代码#include<iostream>using namespace std;string opera[] = {"IN","MOV","ADD","SU原创 2021-05-05 10:21:21 · 304 阅读 · 0 评论 -
课后自主练习(implement)1091. 螺旋函数 naive《编程思维与实践》个人学习笔记
题目思路不难发现,自然数的平方都在函数的右上角和左下角于是我们先进行幂的判断来缩短范围让输入的数a^2<=n <= (a+1)^2然后再将数减去这个幂a^2并且不难发现 两个二次方的差恰好为2a+1,判断剩下的数是否大于a,然后对应的x,y相加相减即可代码#include<iostream>#include<cmath>using namespace std;typedef long long ll;int main(){ ll a;原创 2021-05-11 08:24:15 · 213 阅读 · 0 评论 -
课后自主练习(implement)1089. 移动游戏 medium《编程思维与实践》个人学习笔记
题目思路把经过的每一个点进行记录,把一个循环的终点,起点的dx和dy进行记录然后将输入的点按x,y逐次对比每个被记录的点我们从一维的方向进行分析若dx > 0,x > px, x-px是dx的倍数,说明在以后的循环种是可以达到x值的若dx < 0,x < px, x - px是dx的倍数,同上若dx = 0,说明最后这个x都会回归到原点,这时候只要有一次x == px,就说明每一次循环都会回到该处于是倘若12情况下的x和y在同一轮循环里面到达,我们就认为是Yes原创 2021-05-11 08:14:54 · 166 阅读 · 0 评论 -
课后自主练习(implement)1088. 莫尔斯电码 medium《编程思维与实践》个人学习笔记
题目数据3…/—/…-/…/…/…///…/…///–/—/.-./…/.///-.-./—/-…/./////-…/-.–/.-./—///.----/…—/-----思路用个map打表,然后遍历一遍字符串,注意交界处的处理和最后一个字符在循环外输出即可代码#include<iostream>#include<bits/stdc++.h>using namespace std;map<string,char> m;void init(原创 2021-04-17 10:36:45 · 198 阅读 · 0 评论 -
课后自主练习(implement)1087. 坏掉的彩灯 easy《编程思维与实践》个人学习笔记
题目数据3RYBGRYBGR!RGYB!!!YGRB思路这个题目的要求注定给的字符串任取四个相邻的子字符串,RYBG各占据一个,于是我们可以遍历一遍字符串来看看RYBG对应的在哪个位次,然后mod4可以得到对应的第一次出现位置//注意可以有一个字符从头到尾都没出现过,需要特殊判断在哪个为止,比如说R从头到尾没出现过,那么就得6−f(G)−f(Y)−f(B)6-f(G)-f(Y)-f(B)6−f(G)−f(Y)−f(B)然后每次跨越4,看哪个字母变成了!+1即可#include<io原创 2021-04-13 20:38:42 · 168 阅读 · 0 评论 -
课后自主练习(implement)1086. 波浪图 medium《编程思维与实践》个人学习笔记
题目数据1234567890qwertyuiopasdfghjklzxcvbnm314159265358979323864626433832795028841971693993751058209749445923078164062862111aaaaa2222bcCDefFG,#$%6767df~`wejkwh\|}{dshujdiuewSFDESGf4235思路先遍历一遍,把col和char都记录好然后再遍历一遍看看哪个字符应该放在最底层然后再遍历一遍记录各个字符的row和总层数最原创 2021-04-11 11:56:14 · 179 阅读 · 0 评论 -
课后自主练习(implement)1085. 一个游戏 hard《编程思维与实践》个人学习笔记
题目思路穷举法发现,有两种情况会导致“不公平”①一个数字a有一次“in”(其他数字变成该数字a)并且有一次“out"(数字a变成其他数字)②数字a有两次out(数字a有可能变两次其他不同的的数字)(数据中可能会出现a两次变成同一个数字,这个时候对于游戏来说是公平的)所以我们思路如下:开一个set<pair<int,int>>来进行去重开一个数组来记录若干个数字的out和in次数,最后遍历一遍in和out的数字,若out >= 2 || ( in >原创 2021-04-10 11:04:42 · 134 阅读 · 0 评论 -
课后自主练习(高精度)1084. 遥远距离 Medium《编程思维与实践》个人学习笔记
题目思路弄个类,然后把+ ×操作一下,然后弄个比较函数。。。写类写的好难受,,代码#include<iostream>#include<cctype>#include<cstring>#include<algorithm>typedef long long ll;const int N = 300;using namespace std;struct bigint{ ll arr[N]; int sign;原创 2021-04-26 19:39:13 · 108 阅读 · 0 评论 -
课后自主练习(高精度)1083. 下一个妙数 naive《编程思维与实践》个人学习笔记
题目思路遇见9就把9的下一位数+1,9前面的数(包括9)全变0,直到没有9为止。(注意进位)然后判定数位和是否为9的倍数,是就个位数+1再验证一边,不是就直接输出即可代码#include<iostream>int arr[10000];int main(){ std::string s; std::cin >> s; int len = s.length(); for(int i = len - 1,j = 0; i >=原创 2021-04-11 16:12:28 · 200 阅读 · 0 评论 -
课后自主练习(高精度)1080. i-1 进制 naive《编程思维与实践》个人学习笔记
前面的题目加了个高精度。。。写个类完事然而本地AC OJ WA,把重载的==改成普通函数也不行。。那我只能装作自已AC了。思路是没问题的#include<iostream>#include<cstring>using namespace std;const int N = 2e4;typedef long long ll;string alpha = "0123456789ABCDEF";pair<int,int> complex[16] = {原创 2021-04-19 17:39:55 · 216 阅读 · 0 评论 -
课后自主练习(高精度)1079.第一位数字 naive《编程思维与实践》个人学习笔记
题目思路①用1078. 高次方数的尾数的代码修改一下理论上可以过,但是注意到N 可以取到 1e8,用大数据绝对超时,,,题目分类是大数据结果用大数据过TLE - -|||代码#include<iostream>#include<cstring>#define ll long longusing namespace std;struct BIG{ int arr[(int)1e5]; int arr_num; int power;原创 2021-04-05 20:11:25 · 158 阅读 · 0 评论 -
课后自主练习(高精度)1078. 高次方数的尾数 hard《编程思维与实践》个人学习笔记
题目思路弄个类①A作为底数最多只有9位,幂次最多1000次,估算位次上限是 9×1000 == 9000位,所以就开一个10000的int数组②记录幂power,底数base,尾数exaarr用于储存每次×之后的数,len指代base的数位③通过数学归纳发现100 × 100 == 10000(3位 3位 5位)400 × 400 == 160000(3位 3位 6位)数字相乘位数的变换要么是 相加, 要么是相加-1且数字的累乘累加满足以下代码for(int j = 0; j &原创 2021-04-05 16:34:09 · 193 阅读 · 0 评论 -
课后自主练习(高精度)1077. 小型组合数 medium《编程思维与实践》个人学习笔记
题目思路没卡数据就正常阶乘然后输出吧。。。代码#include<iostream>using namespace std;int main(){ int t; cin >> t; for(int i = 0; i < t; i++) { int m, n; cin >> m >> n; if(n > m - n) n = m原创 2021-04-05 16:25:13 · 124 阅读 · 0 评论 -
课后自主练习(高精度)1076. 最小不重复数 super《编程思维与实践》个人学习笔记
题目思路 暴力破解字符串转换成数组,每次个位数+1遍历一遍判断是否重复,然而超时了进位越界问题在前面有提及这里不再赘述代码#include<iostream>#include<cstring>using namespace std;struct BIG{ string str; int a[5000]; int len; void init() { memset(a,0,sizeof(a));原创 2021-04-04 11:51:58 · 145 阅读 · 0 评论 -
课后自主练习(高精度)1075. 浮点数减法 naive《编程思维与实践》个人学习笔记
题目思路弄一个类依次存放输入的字符串小数部分整数部分小数长度大数长度小数点位置接着判断一下A B 谁大,A大就A-B正常输出B大就B-A再补一个负号注意四舍五入和进位的越界情况即可代码#include<iostream>#include<bits/stdc++.h>#include<cstring>using namespace std;struct BIG{ string s; int in[500]; i原创 2021-04-04 10:49:13 · 166 阅读 · 0 评论 -
课后自主练习(高精度)1074.A-B(Big Integer) easy《编程思维与实践》个人学习笔记
题目Give two positive integer A and B,calucate A-B.Notice that A,B is no more than 500 digits.输入格式The test case contain several lines.Each line contains two positive integer A and B.输出格式For each input line,output a line contain A-B思路把A B 拆开放在容器中,然后判断原创 2021-04-03 15:11:18 · 200 阅读 · 0 评论 -
课后自主练习(高精度)1073. 计算2的N次方 naive《编程思维与实践》个人学习笔记
题目思路数据没有卡大小。。。直接pow函数解决代码#include<iostream>#include<cmath>using namespace std;int main(){ int t; cin >> t; for(int i = 0; i < t; i++) { int n; cin >> n; cout << "case #" &l原创 2021-04-03 14:26:53 · 118 阅读 · 0 评论 -
课后自主练习(高精度)1072. 计算n!右端0的个数(II) naive《编程思维与实践》个人学习笔记
题目思路直接统计n!阶乘中出现了多少次因数5即可,根本不用弄大数据代码#include<iostream>using namespace std;int main(){ int t; cin >> t; for(int i = 0; i < t; i++) { int n; cin >> n; cout << "case #" << i <原创 2021-04-03 14:25:30 · 182 阅读 · 0 评论 -
课后自主练习(高精度)1071. 浮点数加法 naive《编程思维与实践》个人学习笔记
题目思路你会遇到以下数据.3333,你要自己补充000123 你要自己去掉开头的0123 你要自己补充小数易错点在统计整数和小数的长度的时候你得到的确实是整数的数据,但是你在输出的时候由于数组会帮你-1(从0开始)导致你在处理数据的时候最好先-1,不然处理会很麻烦代码#include<iostream>using namespace std;int inte[500] = {0};int sma[500] = {0};int i_len = 0;int原创 2021-04-02 21:50:06 · 178 阅读 · 0 评论 -
课后自主练习(高精度)1070. 计算a的n次方的大整数 medium《编程思维与实践》个人学习笔记
题目思路这些题目基本都可以用deque处理,先进行判断power是1或0的情况然后p是其他数据就进行循环先把deque push进去一个base数,之后从后往前的×base之后进位,进到最前位push_front即可代码#include<iostream>#include<deque>using namespace std;void POW(int b, int p){ deque<int>D; D.push_back(b);原创 2021-03-29 15:18:37 · 269 阅读 · 0 评论