Day 10
23.11.24题目:
思路:找到符合要求的,从后往前查询就行了题解:均在代码注释中代码:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#include <iostream>#include <map> #include <vector>using namespace std;//用map构造伪链表 int main(){ map <int ,int> p2; map <int ,int> p3; int n; cin>>n; vector <int> x; int y=0; while(n--){ int a,b,c; cin>>a>>b>>c; if(c==-1){ /* 由于可能有多个结束地址 ...
Day 9
23.11.23题目:
思路:
从下往上反推一遍即可代码:1234567891011121314151617181920212223242526272829303132#include <iostream>#include <vector>using namespace std;// a.push_back(1);// a.push_back(2);// a.insert(a.begin(),5);// for(int i = 0;i<3;i++){// cout<<a[i]<<endl;// }int main(){ int n; vector <int> a(n); while(cin>>n){ for(int i = n;i>1;i--){ //在0号位插入 a.insert(a.begin(),i); //获取尾元素 int x = a.back(); //删除尾元素 a.pop_back(); //移动到0号 ...
Day 8
23.11.22题目:
代码:123456789101112131415161718192021222324252627282930313233#include <iostream>using namespace std;int aaaa(){ int sum=0;//需要的天数; int n;//石头的数量; int x[n];//每个石头需要的体力; int a;//每天的体力; cin>>n; for(int i=0;i<n;i++){ cin>>x[i]; } cin>>a; int m=0;//剩余体力 for(int i=0;i<n;i++){ if(x[i]>a){ return -1; } if(m>=x[i]){ m=m-x[i]; }else{ sum++; m = a - x[i]; } } return sum;}int main() ...
Day 7
23.11.21题目:
代码:1234567891011121314151617181920212223242526#include <iostream>using namespace std;int main(){ int x; cin>>x; while(x--){ string s; cin>>s; s=s+"0"; int n = s.size(); int x=0;//1.默认开头就是8 int sum=0; for(int i = 0;i<n;i++){ if(s[i]!='8'){ if(i-x==2){//3.判断长度,开头是8,结尾不是8,两下标相减. sum++; } //2.如果开头不是8,就向后移 (导致了要把字符串加长一位) //直到找到开头是8 x=i+1; } } cout<<sum<<endl; & ...
Day 6
23.11.20前言:回来了!!!题目:
解题思路:
代码:12345678910111213141516171819202122232425262728293031323334#include <iostream>#include<cmath>using namespace std;int fun(int a1,int b1,int c1){ int x1,x2; x1=(-b1+sqrt(b1*b1-4*a1*c1))/2*a1; x2=(-b1-sqrt(b1*b1-4*a1*c1))/2*a1; return x1>=x2?x1:x2;}int main(){ while(1){ long long sum = 0; int x;//消费金额 int n;//奖池数量 cin>>x>>n; int a[n+1];//n个奖池,所对应的积分,0号弃用 for(int i=1;i<n+1;i++){ cin>>a[i]; } int ...
Day 5
23.11.17题目:
解题思路:此题五月份做过,比较熟悉。
链接:1218. 最长定差子序列 - 力扣(LeetCode)
代码:1234567891011121314151617181920212223242526#include <iostream>#include <map>using namespace std;//dp[i]表前i个的max int aaaa(unsigned long long a[],int n,int k){ map<unsigned long long,unsigned long long> dp; unsigned long long M=0; for(int i=0;i<n;i++){ dp[a[i]]=dp[a[i]-k]+1; M=max(M,dp[a[i]]); } return M;}int main(){ while(1){ int n,k; cin>>n; cin>>k; unsigned long ...
Day 4
23.11.16题目:已知一数列的前两项都为1,从第3项开始,奇数项为前两项之和,偶数项为前两项之差。
那么我们很快可以算出数列的前几项:1 1 2 1 3 2……
现在,请你求数列的第n项。
输入:
第一行为正整数T,表示询问的次数
接下来T行,每行包含一个正整数n表示询问的是第几项(0<n<=1000000000,1<=T<=100000)
输出:
输出T行,每行包含一个整数表示本次询问的结果,然后换行。
由于答案可能很大,所以只需要输出它对1000000007取余之后的结果。
样例输入:
3
1
2
3
样例输出:
1
1
2
解题思路:注:不要再计算中进行mod操作,会丢失数据的精度。
例如:
此处mod10:
数据为:A,9,12,X
若计算时mod,12mod10=2
数据为:A,9,2,X
x=2-9;
与原本数据12-9不符合。
代码:1234567891011121314151617181920212223242526272829303132 ...
Day 3
23.11.15题目:问题描述:小明很喜欢在一家超市消费,跟老板成了好朋友,所以每次付款时老板都会把小明本次消费的小数点部分抹掉。如果小明本次消费金额大于10元,那么老板还会额外把金额的个位数也抹掉。输入:第一行为整数T,表示小明消费的次数接下来T行,每行包含一个浮点数money,表示小明本次消费的金额。(0<money<=1e18,1<=T<=1000)输出:输出T行,每行包含一个整数表示小明本次消费的实付金额,然后换行。样例输入:335.76.220样例输出:30620
解题思路:利用strtoll函数将字符串转换为long long 类型。
注:因为金额范围0<money<=1e18,且利用for循环输入long long 类型时,若输入了小数,会提前跳出循环,无法完成输入。
笔记:stoi,stol,stoll ,stof,stod分别转int,long,long long,float,double。
12345678910111213141516#include <iostream>usi ...
Day 2
23.11.14题目:
解题思路1:赊账前提: 易知,对于赊的可乐数与手中空瓶数,以及瓶盖数要有如下关系:
**若赊账x瓶;
(手中空瓶数+x(空瓶数))/2 + (手中瓶盖数+x(瓶盖数))/4 >= x
也就是说,必须做到赊账后能还给老板。**
数据分析: 对于空瓶数:取0或者1
对于瓶盖数:取0,1,2,3
这时才满足借的条件,也就是自身不能在和老板换取了,只有通过赊账才有可能继续下去
列出下面表格:
| 空瓶数 | 瓶盖数 | 赊账数(瓶) |
|0|0|无论借几瓶都无解|
|0|1|无论借几瓶都无解|
|0|2|要一次性借2瓶|
|0|3|借一瓶|
|1|0|借一瓶|
|1|1|借一瓶|
|1|2|借一瓶|
|1|3|借一瓶|
解题思路2:当然这是一个数学题,可以用数学的思维去解答:
假设1瓶可乐1元钱,喝完瓶子当0.5元用,瓶盖可以当0.25元用,相当于你只花了0.25元喝一瓶可乐,换句话说就是1瓶可乐的钱可以喝4瓶,输入可乐的数量,直接输出4的倍数就行了
代码:1234567891011121314151 ...
Day 1
23.11.13题目:
代码:12345678910111213141516171819202122232425262728293031#include <iostream>using namespace std;bool aaaa(int a[][4],int x,int y,int num){ int i=0;//行 int j=y-1;//列 while(i<=x-1&&j>=0){ if(a[i][j]==num){ return true; }else if(a[i][j]>num){//放弃列 j--; }else{//放弃行 i++; } } return false; }int main(){ int a[4][4]={1,2,8,9, 2,4,9,12, 4,7,10,13, 6,8,11,15}; int num; while(cin> ...

