1002 A+B for Polynomials (25 分)(模拟)
注意参数可能会出现0 0 的情况,当出现这种情况时需要将ma.size()和输出进行判断,ma.size()需要-1,输出则需要跳过
1010 Radix (25 分)(二分法)(进制转换)
这题坑很多,可以把两个数都转化为十进制比较,而且进制的上限也不是35进制,还有就是high要取它的十进制数和最大位的进制加一的数两个之中最大的,因为题目中有这么一句话
If the solution is not unique, output the smallest possible radix.
1011 World Cup Betting (20 分)
就是你理解的的那样,别怀疑自己了
1015 Reversible Primes (20 分)(素数)
注意要读清题
1022 Digital Library (30 分)(map)
注意printf("%07d");
1033 To Fill or Not to Fill (25 分)(贪心)
注意一开始一定要设置一个拦截数据v[0],否则到终点停不下来
#include<bits/stdc++.h>
using namespace std;
#define inf 10e9
struct Node{
double price;
double dis;
};
bool cmp(Node a,Node b){
return a.dis<b.dis;
}
int main(){
double Cmax,D,Davg;
int N;
cin>>Cmax>>D>>Davg>>N;
vector<Node> v(N+1);
v[0]=Node{0.0,D}; //拿着个数据拦住最后结束的
for(int i=1;i<=N;i++){
cin>>v[i].price>>v[i].dis;
}
sort(v.begin(),v.end(),cmp);
double nowprice=0.0; //现在的油价
if(v[0].dis!=0){
cout<<"The maximum travel distance = 0.00";
return 0;
}
else
nowprice=v[0].price;
double totalprice=0.0; //总共加油花的钱
double leftdis=0.0; //到目标加油站后油箱里还有多少公里的油
double nowdis=0.0; //现在的位置
double maxd=0.0; //最远能跑多远
while(nowdis<D){ //现在的位置小于总长度时循环
maxd=nowdis+Cmax*Davg; //目前这个加油站的基础上,最远能跑多远
bool f=false;
double minprice=inf; //高于当前油价的最低油价
double mindis=0; //如果油价都贵,选用到相对便宜加油站的距离
for(int i=1;i<v.size()&&v[i].dis<=maxd;i++){
/*在现在位置的加油站到最远能跑的距离中遍历所有的加油站
如果有比现在这个加油站油价低的,就只加能够跑到那个加油站的油*/
if(v[i].dis<=nowdis) continue;
if(v[i].price<nowprice){
totalprice+=(v[i].dis-leftdis-nowdis)/Davg*nowprice;
leftdis=0.0; //清空油箱
nowdis=v[i].dis;
f=true;
nowprice=v[i].price;
break;
}
if(v[i].price<minprice){
/*记录目前最低油价,当所有油价都比目前油价高的时候,在这个加油站加满
找一家相对便宜的继续判断*/
minprice=v[i].price;
mindis=v[i].dis;
}
}
if(!f&&minprice!=inf){ //说明油能跑到下一个加油站,就是油价有点贵
totalprice+=(nowprice*(Cmax-leftdis/Davg)); //在这个加油站加满油
leftdis=(nowdis+Cmax*Davg)-mindis;
nowdis=mindis;
nowprice=minprice;
}
if(!f&&minprice==inf){ //说明油跑不到下一个加油站了
nowdis+=Cmax*Davg;
printf("The maximum travel distance = %.2f",nowdis);
return 0;
}
}
printf("%.2f",totalprice);
}
1040 Longest Symmetric String (25 分)(动态规划)
注意字符串长度的边界问题,还有还有只有一个换行符的字符串最长也是1
1044 Shopping in Mars (25 分)(双指针)
可以类比成一只虫子在蠕动,还需要判断没有正好等于的情况
1045 Favorite Color Stripe (30 分)(动态规划)(最长不下降子序列)
最长不下降子序列的模板
1049 Counting Ones (30 分)(逻辑)(数学问题)
参考一下自己写的博客从1到n整数中1出现的次数:O(logn)算法_Elephant_King的博客-优快云博客
1053 Path of Equal Weight (30 分)(dfs)
题目要求:一道dfs的题,题目要求求出从根节点到叶子结点权值之和等于给定值的所有序列,还要求最后的所有序列按照字典序从小到大排序
问题:因为排序的问题,一开始想着用动态数组存储结点,如果符合要求就把这个数组所有值存到一个string的动态数组中,然后按string的字典序排序,交了一发测试点二错了
解决:看了看之前第一遍的代码用了map嵌套vector并用greater来进行从大到小排序,试了试还这是真是这个的问题,不知道为啥
1064 Complete Binary Search Tree (30 分)(树)
柳婼优快云里没有,得到他官网上看题解,递归函数里面的root是代表位置下标的
1067 Sort with Swap(0, i) (25 分)(贪心)
再看看
1068 Find More Coins(动态规划)(01背包)
没看懂,等再看看吧
1073 Scientific Notation(20 分)(字符串处理)
再看看吧,做了三四遍还是让这个科学计数法的题盘,注意最后输出的时候可以不用改变字符串而是改变输出方式来进行输出
1074 Reversing Linked List (25 分)(链表)
注意一下反转链表的输出格式
1077 Kuchiguse (20 分)(字符串处理)
要求:求最大后缀字符串
有想法解决,一开始想的是动态数组存string字符串,然后补0到一样长,这样也会有问题,感觉不太能实现,就看了看题解,直接倒置字符串就行
1079 Total Sales of Supply Chain (25 分)(树)
不能通过a[子节点下标]=父节点下标这样倒着存储,只能正着存储,否则最后一个测试点会超时?
1081 Rational Sum (20 分)(分数运算)
看自己写的博客关于分数的问题_Elephant_King的博客-优快云博客
1085 Perfect Sequence (25 分)(双指针)
注意两点,超时的break和数据类型long long
1095 Cars on Campus (30 分)(map)
没什么好说的,只能说多再看,学习一下思路,注意剪枝
1096 Consecutive Factors (20 分)(逻辑)
用sqrt判断比i*i判断要快
注意最后一个测试点,刚好卡着测试点边界,所以需要开long long
1099 Build A Binary Search Tree (30 分)(树)
注意一下层序输入按层的二位数组输出形式
1103 Integer Factorization (30 分)(dfs)(剪枝)
再看看吧,注意一下index减的位置
1104 Sum of Number Segments (20 分)(逻辑)(数学问题)
找规律,和1093 Count PAT's有异曲同工之妙,但是1093是不能包括自身,而1104是可以包括自身
long double 比double精度更高,使用long double可以不使用柳婼的longlong转换,但是在计算sum加时一定要强转
还有就是输出类型是"%Lf",L大写
1107 Social Clusters (30 分)(并查集)
看自己写的文章https://blog.youkuaiyun.com/Elephant_King/article/details/121073930
注意此题father数组不能从零开始,因为有
if(course[data]==0){
/*这行代表father数组不能从零开始,否则i=0的时候会有错误*/
course[data]=i;
}
代表着从零开始会出错
1108 Finding Average (20 分)(字符串处理)
也是老朋友了,本题要用sscanf和sprintf,两个都是只能用char类型的字符串,不能用string类型的
1110 Complete Binary Tree (25 分)(树)
注意
9
7 8
- -
- -
- -
0 1
2 3
4 5
- -
- -
这种输入法需要用string接受,因为有可能是两位数,下标index用int表示就可以,因为只用2^20=1024*1024不大
1117 Eddington Number (25 分)(逻辑题)
人家是找一个数字E,当这些天有E天的量大于E,就说明这个数符合,不是那个骗24分的那个方法
比如:题中例子给的数据,10 9 8 8 7 7 6 6 3 2
如果答案是10,说明给的这些天有十天的值是大于等于11的
如果答案是9,说明这些天有九天的值是大于等于10的
还有从大到小排可以不用写cmp,可以直接reverse
sort(a,a+n);
reverse(a,a+n);
1122 Hamiltonian Cycle (25 分)(图)
哈密尔顿路径问题,不能多走少走而且必须走成环
1126 Eulerian Path (25 分)(图)
degree节点的度,居然都忘了度是什么了,真有我的
本题需要判断:是不是连通图,每个节点的入度和出度
1130 Infix Expression (25 分)(树)
当right != -1说明该结点不是叶子节点(只存在右边不存在左边不能组成算式),将左右结点的val和自身的val串成字符串,保存在自己的val中。如果当前index又不是根结点,那就在左右两边加上括号。
组成算式只有可能是该节点有两个叶子结点或者只有右叶子结点
记住吧
1134 Vertex Cover (25 分)(map)
读懂题啊哥哥,咱英语就这么差劲吗
1136 A Delayed Palindrome (20 分)(大整数相加)
题目要求里说了是不超过1000位,老老实实用大整数向家坝,还有就是一开始输入的时候注意也有可能直接输入超限,所以输入的时候就应该直接用string接受,不能用int,纯纯的恶心人了
1140 Look-and-say Sequence (20 分)(字符串处理)
不多说,老朋友了,多看
1142 Maximal Clique (25 分)(图)
读懂题啊哥哥
1145 Hashing - Average Search Time (25 分)(Hash)
哈希表判断能否插入(二次查询法,普通探测法)是判断循环次数小于等于hash长度时
for (int j = 0; j <= tsize; j++) {//循环次数小于hash表的长度
int pos = (a + j * j) % tsize; //超过长度就回到起点
if (v[pos] == 0) {
v[pos] = a;
flag = 1;
break;
}
}
至于为什么是小于等于hash长度(此处判断值计算正增长,不包括负增长的情况),是因为平方探测法的循环是按照一个hash长度来进行循环的,在第一轮循环中没有找到合适的插入位置的话,在后面的循环也一定不能找到自己的插入位置
1146 Topological Order (25 分)(图)(拓扑排序)
拓扑排序的条件:节点的入度等于零,去掉这个节点的所有出度,下一个节点的入度也得等于零直到结束
1149 Dangerous Goods Packaging (25 分)(map)
注意等这一组输入完再输出yes或者no,否则则就会报错,挺邪门的
1152 Google Recruitment (20 分)(字符串处理)
注意这个输入长度并不是没用的,然后还有注意边界问题是小于等于
判断素数的函数
bool isPrime(int x){
if(x==0||x==1) return false;
for(int i=2;i*i<=x;i++){
if(x%i==0)
return false;
}
return true;
}
还有cin.getline与getline的区别:
cin.getline(ch,规定的输入长度) 是对于char类型的输入,可以输入空格,但是可以规定长度
getline()是对于String类型的输入,可以输入空格,但是不能规定长度
1154 Vertex Coloring (25 分)(map)
two ends是两端的意思,不是两个结束的节点