T1
(本题数据较小,可以直接暴力枚举)
设字符串为S,字符串长度为n,枚举i=0至n-3,若s[i] == 'A' && s[i+1] == 'P' && s[i+2] == 'T',则符合“这是一种病”。
(可以写一个函数,会更简单)
(不要忘了换行和输出为大写)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T2
F(a,b)=(a−c)−(c+b)+2c
如果你上过小学二年级,就知道F=a-b
直接输出就好
(注意数据范围,要开 long long;不要忘了换行)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T3
l=1,4,12,15,45,48,144,…
读题得,l[0]=1,若i>0 && i%2==-1,则l[i]=l[i-1]+3,若i>0 && i%2==0,则l[i]=l[i]*3;
T<=10^4 , n<=10^3
可以用O(Tn)直接暴力,但是......ans大概率会爆long long(因为ans可以大概算是3^(n/2))
所以直接用高精度乘法和除法(即用string存数字)
普通版:
极简版:
我因为一开始没有看数据范围,然后就错了一次,www
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T4
本题很简单。但题目有点问题。
“利用有限的空间回收最有价值k的件废品(即件数≤k )"
"输出仅一行一个整数,表示A,B 种类废品各拿取k件后的最优结果价值"
根据题意,每件物品的实际价值为v-p,可以直接排个序然后求answer
(每种废品不超过k件,若一件废品价格<0,则肯定不选)
此处使用的是优先队列(由题意得,sort等其他排序方法皆可)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T5
由题意得:
(若n<3 ans=0)
设sum为n位数字中只由3、5、7组成(3、5、7不需要只出现一次)的数字的个数。
设a为n位数字中只由3、5组成(3、5、7不需要只出现一次)的数字的个数。
设b为n位数字中只由3、7组成(3、5、7不需要只出现一次)的数字的个数。
设c为n位数字中只由5、7组成(3、5、7不需要只出现一次)的数字的个数。
若你像我一样是初二的学生,则知sum=3^n , a=b=c=2^3;
如果你再聪明一点,就知道answer=sum-(a+b+c)-3
For exemple:
如图所示,未被划线的则是题目中所规定的357数
所以ans=n-a-b-c+3(a,b,c为sum种可能中不合格的可能,333、555、777都被画了也就是减两次,所以要加回来)
我们可以运用快速幂来求解
(快速幂的原理是x^(2 * y) = (x^y) ^2 )
注意,n要开long long ,且 power(3,n)-3power(2,n)+3可能为负数,所以要进行操作来使其成为非负数(只+p是不行的,因为power(3,n)-3power(2,n)+3可以达到-3e9+4)
我因此错了好几遍,yyy
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T6
这道题应该可以用贪心或动态规划来解决,我这里用的是动态规划
因为房子是环形分布的,所以第一个房子难以确定它的初始值(我认为),于是可以分四类来讨论:
1、第一个和最后一个都选选
2、选第一个不选最后一个
3、选最后一个不选第一个
4、最后一个和第一个都不选
应为就这四类,所以可以直接写
l[i]:第i只小猪家的的初始初始金币,a[i]:加固第i只小猪家后的所得金币,b[i]不加固第i只小猪家后的所得金币
转移方程:
a[i]=max(a[i-1]+l[i]-2c,b[i-1]+l[i]);
b[i]=max(a[i-1],b[i-1]);
//-2c是因为:“强化一只小猪的家园会从其每个邻居的家园里每次拿走c 个金币,来为自己的家园建设更好的防御措施。然而,强化操作并不会改变这只小猪的金币数量,只有它的邻居们的金币数量会减少。”,若选择第i-1、i只小猪,则他们会相互拿走c个金币,即-2c
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
作者C++才学了1年多,第一次写题解,写不好请见谅(快期末考试了!没时间所以写的很快,不是很细致)