AcWing第65场周赛
一个一个看,只要字符串遇到 A 就从第 i + 1 开始
如果遇到 P 价值加一
如果遇到 A 就退出循环
最后取所有价值最大值即可
#include<bits/stdc++.h>
using namespace std;
int main()
{
string st;
int t;
cin>>t;
while(t--){
int n;
cin>>n;
cin>>st;
int c=0;
int ma=0;
for(int i=0;i<st.size();i++){
c=0;
if(st[i]=='A'){
bool ok=0;
for(int j=i+1;j<st.size();j++){
if(st[j]=='P')c++;
if(st[j]=='A'){
ok=1;
break;
}
if(ok==1)break;
}
}
ma=max(ma,c);
}
cout<<ma<<'\n';
}
}
对于每一个字符串只需要将他们转化一种形式
比如说223132这个字符串,转换一下是001110那么只需要在哈希表中存储1110即可,前缀0可以不用存储
对于每次查询也将前缀零不存储然后输出一下每个键所对用的值即可
#include <iostream>
#include <unordered_map>
using namespace std;
unordered_map<string , int> ma;
int main(){
int t;
cin >> t;
while(t --){
char ar[2];
string s1 , s2 = "";
cin >> ar >> s1;
for(int i = 0; i < s1.size(); i ++ ){
if(s1[i] % 2 == 0) s2 += "0";
else s2 += "1";
}
string s3 = "";
for(int i = 0;i < s2.size(); i ++ ){
if(s2[i] != '0' || i == s2.size() - 1){
for(i ; i < s2.size(); i ++ )s3 += s2[i];
}
}
if(*ar == '+') ma[s3] ++;
else if(*ar == '-') ma[s3] --;
if(*ar == '?'){
cout << ma[s3] << endl;
}
}
}
力扣第307场周赛
1.力扣
ex为当前轮的经验值
ex_add和en_add为训练阶段需要增加的经验和精力
energy每轮都会消耗,所以直接加上所有的energy,然后减去initial即可(注意为了每轮严格大于en_add初值为1)
对于experience,如果当前轮的ex比experience小,就需要学到experience+1
class Solution {
public:
int minNumberOfHours(int ien, int iex, vector<int>& energy, vector<int>& experience) {
int time = 0;
int ex = iex;
int en_add = 1, ex_add = 0;
int n = energy.size();
for(int i=0;i<n;i++){
en_add += energy[i];
if(ex <= experience[i]){
ex_add += experience[i] - ex + 1;
ex = experience[i] + 1;
}
ex += experience[i];
}
return fmax(en_add-ien, 0) + fmax(ex_add, 0);
}
};
2.力扣
用一个数组nums记录0到9每个数字出现的次数,如果只有0出现次数大于一次,返回num中出现的最大数字,否则从大到小遍历nums,nums[i]%2==1,则将要返回字符串name初始化为i,然后遍历数组,name两边加上nums[i]/2的字符
class Solution {
public:
string largestPalindromic(string num) {
int n=num.size();
vector<int>nums(10,0);
for(int i=0;i<n;i++){
nums[num[i]-'0']++;
}
int v=0;
for(int i=1;i<10;i++){
if(nums[i]/2>0)
v=1;
}
if(v){
string name;
for(int i=9;i>=0;i--){
if(nums[i]%2==1){
name+=('0'+i);
break;
}
}
for(int i=0;i<10;i++){
string temp1;
char a=i+'0';
for(int j=0;j<nums[i]/2;j++){
temp1.push_back(a);
}
name=temp1+name+temp1;
}
return name;
}else{
for(int i=9;i>=0;i--){
char o='0'+i;
string h;
h+=o;
if(nums[i]>0)
return h;
}
}
return " ";
}
};