@@ -15,7 +15,6 @@ tags: ["福州大学" ,"转专业" ,"C++", "Python", "算法"]
1515思路:先用模拟求一下需要使用的符号和层数,然后再输出即可
1616
1717``` cpp
18- #include < iostream>
1918#include < bits/stdc++.h>
2019
2120using namespace std ;
@@ -54,7 +53,6 @@ int main()
5453思路:从` 2 ` 为开头,长度` len ` 寻找满足条件的因数列(` n%因数积==0 ` ),坑是遇到质数,因数是他本身
5554
5655``` cpp
57- #include < iostream>
5856#include < bits/stdc++.h>
5957
6058using namespace std ;
@@ -112,7 +110,6 @@ int main()
112110思路:定义一个和的分子分母` a、b ` ,然后用公式去算,最后用` __gcd() ` 求最大公约数化简,坑是有一个测试点是0,要单独处理
113111
114112``` cpp
115- #include < iostream>
116113#include < bits/stdc++.h>
117114
118115using namespace std ;
@@ -236,10 +233,9 @@ int main()
236233
237234### 5. [ L1-028 判断素数] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=994805106325700608 )
238235
239- 思路:先特殊情况排除` x<2 ` 不是质数,然后再判断` x==2 ` 是质数,然后再排除偶数,最后循环用奇数验证` x ` 是否为质数,坑是数范围是2的31次方,刚好不能用` int ` (2的31次方-1 ),得用` long long ` 存(2的64次方-1 )
236+ 思路:先特殊情况排除` x<2 ` 不是质数,然后再判断` x==2 ` 是质数,然后再排除偶数,最后循环用奇数验证` x ` 是否为质数,坑是数范围是2的31次方,刚好不能用` int ` ($2^{31}-1$ ),得用` long long ` 存($2^{63}-1$ )
240237
241238``` cpp
242- #include < iostream>
243239#include < bits/stdc++.h>
244240
245241using namespace std ;
@@ -297,7 +293,6 @@ int main()
297293思路:先判断字符串长度和目标长度,不够就用`string`补齐空位,超出就用`substr`截取,坑就是如果你用`cin`读取前两个数据,那么你的`cin`的缓冲区会剩余一个换行符,你需要在`getline`读取字符串之前调用`cin.ignore()`忽略掉缓冲区的换行符。
298294
299295```cpp
300- #include <iostream>
301296#include <bits/stdc++.h>
302297
303298using namespace std;
@@ -331,7 +326,6 @@ int main()
331326思路:先把字符串存到分片存到列里面,当然可以用` substr ` ,我懒就直接遍历字符串了,然后` reverse ` 反转一下,最后在按照格式打印就行了,坑就是每列的字符数不够要补空格不然会吃WA
332327
333328``` cpp
334- #include < iostream>
335329#include < bits/stdc++.h>
336330
337331using namespace std ;
@@ -387,7 +381,6 @@ int main()
387381思路:模拟,没啥难的。坑是输入可能有问题,所以结束的书要及时` erase ` 掉,还有` round(double,double) ` 返回值还是` double ` 要转为` int ` 不然格式化会出事233
388382
389383``` cpp
390- #include < iostream>
391384#include < bits/stdc++.h>
392385
393386using namespace std ;
@@ -469,7 +462,6 @@ print(n//x,c)
469462思路:给每个学校都准备个` vector ` 表示每个学校的座位,然后把这些` vector ` 打包塞进一个` vector ` 表示所有学校,然后主循环中维护变量` i ` 表示每个学校对应的座位索引,还有变量` seat ` 表示座位号,遍历学校` vector ` ,通过` i ` 给每个学校相同队伍位置赋值` seat ` ,每赋值一次` seat++ ` ,直到只剩一个学校` seat+=2 ` ,最后输出结果。坑没多少,但是大模拟很考验耐心,慢慢调试。
470463
471464``` cpp
472- #include < iostream>
473465#include < bits/stdc++.h>
474466
475467using namespace std ;
@@ -589,7 +581,6 @@ int main()
589581| ** 垂直镜像** | ` new[i][j] = old[n-1-i][j] ` | ` 1 2 3 ` → ` 7 8 9 ` <br >` 4 5 6 ` → ` 4 5 6 ` <br >` 7 8 9 ` → ` 1 2 3 ` |
590582
591583``` cpp
592- #include < iostream>
593584#include < bits/stdc++.h>
594585
595586using namespace std ;
@@ -644,7 +635,7 @@ int main()
644635}
645636```
646637
647- ### 13. [ L1-058 6翻了] ( < https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1111914599408664577 > )
638+ ### 13. [ L1-058 6翻了] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1111914599408664577 )
648639
649640思路:用正则表达式替换掉9个以上的连续` 6 ` 为` 27 ` ,然后替换掉3个以上的连续` 6 ` 为` 9 ` ,注意替换顺序
650641
@@ -658,15 +649,259 @@ s=re.sub("6{4,9}","9",s)
658649print (s)
659650```
660651
661- ### 14. [ L1-064] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1111914599412858885 )
652+ ### 14. [ L1-064 估值一亿的AI核心代码 ] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1111914599412858885 )
662653
663- ### 15. [ L1-071 ] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1336215880692482054 )
654+ 思路:字符串处理首先想 ` Python ` 用正则表达式,不然会被恶心死,当然这题就算你用正则表达式也会被恶心。首先要先把字符串转为小写,这里按照题目要求排除 ` I ` ,然后处理空格,利用正则表达式删除所有不符合要求的空格,然后把2个以上的空格替换为1个空格,然后匹配 ` I ` 和 ` me ` 换位 ` __you ` ,注意不能直接换成 ` you ` ,可能会和下面的 ` can you ` 冲突,然后匹配完 ` can you ` 再把 ` __you ` 换回去
664655
665- ### 16. [ L1-072] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1336215880692482055 )
656+ | 正则表达式 | 替换为 | 作用描述 |
657+ | ------------| --------| ----------|
658+ | ` r"^ +" ` | ` "" ` | 删除字符串开头的所有空格 |
659+ | ` r" +$" ` | ` "" ` | 删除字符串末尾的所有空格 |
660+ | ` r" +(?=[!?.:'])" ` | ` "" ` | 删除标点符号(` !?.:' ` )前的所有空格 |
661+ | ` r" {2,}" ` | ` " " ` | 将两个或更多连续空格替换为单个空格 |
662+ | ` r"\b(I\|me)\b" ` | ` "__you" ` | 将单词"I"或"me"临时替换为"__ you" |
663+ | ` r"\bcan you\b" ` | ` "I can" ` | 将"can you"转换为"I can" |
664+ | ` r"\bcould you\b" ` | ` "I could" ` | 将"could you"转换为"I could" |
665+ | ` "__you" ` | ` "you" ` | 将临时标记"__ you"恢复为"you" |
666666
667- ### 17. [ L1-087] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1518581903422062592 )
667+ ``` python
668+ import re
669+
670+ n= int (input ())
671+ for _ in range (n):
672+ s= input ()
673+ print (s)
674+
675+ s= s.replace(" ?" ," !" )
676+ s = " " .join([ i.lower() if i!= ' I' else i for i in s])
677+
678+ s= re.sub(r " ^ + | + $ | + (?= [!?.:' ]) " ," " ,s)
679+ s= re.sub(r " {2,} " ," " ,s)
680+
681+ s= re.sub(r " \b ( I| me) \b " ," __you" ,s)
682+ s= re.sub(r " \b can you\b " ," I can" ,s)
683+ s= re.sub(r " \b could you\b " ," I could" ,s)
684+ s= s.replace(" __you" ," you" )
685+
686+ print (" AI:" ,s)
687+ ```
688+
689+ ### 15. [ L1-071 前世档案] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1336215880692482054 )
690+
691+ 思路:发现每回答一次n,结论增加$2^{层数-1}$,所以就很简单了
692+
693+ ``` cpp
694+ #include < bits/stdc++.h>
695+
696+ using namespace std ;
697+
698+ using ll = long long ;
699+
700+ int main ()
701+ {
702+ int n,m;
703+ cin >> n >> m;
704+ for (int i=0;i<m;i++)
705+ {
706+ int ans=1;
707+ for (int j=n-1;j>=0;j--)
708+ {
709+ char c;
710+ cin >> c;
711+ if (c=='n')
712+ {
713+ ans+=pow(2,j);
714+ }
715+ }
716+ cout << ans << '\n';
717+ }
718+ }
719+ ```
720+
721+ ### 16. [ L1-072 刮刮彩票] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1336215880692482055 )
722+
723+ 思路:又是一题超级烦人大模拟,首先应该先读取初始棋盘,但是有个坑,就是有一个` 0 ` 需要你填出来,可以先记一下` 0 ` 的位置,然后求一下和,最后用` 45-和 ` 就是` 0 ` 的点数,还有个坑就是求列的点数和的时候得` d-3-1 ` ,最后建个` unordered_map ` 映射点数和金币(傻逼)
724+
725+ ``` cpp
726+ #include < bits/stdc++.h>
727+
728+ using namespace std ;
729+
730+ using ll = long long ;
731+
732+ unordered_map<int ,int > coins =
733+ {
734+ {6,10000},{7,36},{8,720},{9,360},{10,80},{11,252},{12,108},
735+ {13,72},{14,54},{15,180},{16,72},{17,180},{18,119},{19,36},
736+ {20,306},{21,1080},{22,114},{23,1800},{24,3600}
737+ };
738+
739+ int main ()
740+ {
741+ int g[3][3];
742+
743+ int init_x,init_y,sum=0;
744+ for (int r=0;r<3;r++)
745+ {
746+ for (int c=0;c<3;c++)
747+ {
748+ int x;
749+ cin >> x;
750+ g[r][c]=x;
751+ sum+=x;
752+ if (x==0)
753+ {
754+ init_x=r;
755+ init_y=c;
756+ }
757+ }
758+ }
759+
760+ g[init_x][init_y]=45-sum;
761+
762+ for (int i=0;i<3;i++)
763+ {
764+ int x,y;
765+ cin >> x >> y;
766+ x--; y--;
767+
768+ cout << g[x][y] << '\n';
769+ }
770+
771+ int d,p=0;
772+ cin >> d;
773+
774+ if (d<=3)
775+ {
776+ for (int c=0;c<3;c++)
777+ {
778+ p+=g[d-1][c];
779+ }
780+ }
781+ else if (d<=6)
782+ {
783+ for (int r=0;r<3;r++)
784+ {
785+ p+=g[r][d-1-3];
786+ }
787+ }
788+ else if (d==7)
789+ {
790+ for (int i=0;i<3;i++)
791+ {
792+ p+=g[i][i];
793+ }
794+ }
795+ else
796+ {
797+ for (int i=0;i<3;i++)
798+ {
799+ p+=g[i][3-1-i];
800+ }
801+ }
802+ cout << coins[p];
803+
804+ }
805+ ```
806+
807+ ### 17. [ L1-087 机工士姆斯塔迪奥] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1518581903422062592 )
808+
809+ 思路:首先创建图格` vector<vector<bool>> ` 存储地图,然后读取输入来将被炸的格子设为不安全,最后遍历整个地图,统计所有安全的图格
810+
811+ ``` cpp
812+ #include < bits/stdc++.h>
813+
814+ using namespace std ;
815+
816+ using ll = long long ;
817+
818+ int main ()
819+ {
820+ int n,m,q;
821+ cin >> n >> m >> q;
822+ vector<vector<bool>> g(n,vector<bool>(m));
823+
824+ for (int i=0;i<q;i++)
825+ {
826+ bool column;
827+ int p;
828+ cin >> column >> p;
829+ p--;
830+ if (column)
831+ {
832+ for (int j=0;j<n;j++)
833+ {
834+ g[j][p]=true;
835+ }
836+ }
837+ else
838+ {
839+ for (int j=0;j<m;j++)
840+ {
841+ g[p][j]=true;
842+ }
843+ }
844+ }
845+
846+ int res=0;
847+ for (int i=0;i<n;i++)
848+ {
849+ for (int j=0;j<m;j++)
850+ {
851+ if (!g[i][j])
852+ {
853+ res++;
854+ }
855+ }
856+ }
857+ cout << res;
858+ }
859+ ```
860+
861+ ### 18. [ L1-088 静静的推荐] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1518582000729911296 )
862+
863+ 思路:用` map<int,pair<int,int>> ` 存储天梯赛分数和PTA分数,其中PTA达标的和没达标的分开存到` pair<int,int> ` 中,输入时忽略天梯赛分数低于175分的学生(~~ 斩杀线~~ ),然后遍历整个` map ` ,其中PTA分数达标的学生无论K够不够都可以直接被录取,所以直接` res+=p.second.first; ` ,PTA分数没达标的学生只能在K论中按照成绩被录取,所以去k和人数的最小值即` res+=min(k,p.second.second); ` ,注意这题使用模拟会直接超时,坑死了
668864
669- ### 18. [ L1-088] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1518582000729911296 )
865+ ``` cpp
866+ #include < bits/stdc++.h>
867+
868+ using namespace std ;
869+ using ll = long long ;
870+
871+ int main ()
872+ {
873+ int n,k,s;
874+ cin >> n >> k >> s;
875+ map<int,pair<int,int>> stu;
876+
877+ for (int i=0;i<n;i++)
878+ {
879+ int gplt,pta;
880+ cin >> gplt >> pta;
881+
882+ if (gplt<175)
883+ {
884+ continue;
885+ }
886+
887+ if (pta>=s)
888+ {
889+ stu[gplt].first++;
890+ }
891+ else
892+ {
893+ stu[gplt].second++;
894+ }
895+ }
896+ int res=0;
897+ for (auto &p:stu)
898+ {
899+ res+=min(k,p.second.second);
900+ res+=p.second.first;
901+ }
902+ cout << res;
903+ }
904+ ```
670905
671906### 19. [ L1-094] ( https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1649748772841508869 )
672907
0 commit comments