#1
#include<bits/stdc++.h>
using namespace std;
int main(){
int t,n,res = 0,ans = 0;
cin>>t;
while(t--){
cin>>n;
string st;
cin>>st;
res = 0,ans = 0;
for(int i = n-1;i >= 0;i--){
if(st[i] == 'P') res++;
else{
if(ans < res) ans = res;
res = 0;
}
}
cout<<ans<<endl;
}
return 0;
}
#2
哈希表
#include<bits/stdc++.h>
using namespace std;
const int N = 1 << 18;
int n;
int cnt[N];
int main(){
scanf("%d",&n);
char op[2],str[20];
while(n--)
{
scanf("%s%s",op,str);
int x = 0;
for(int i = 0;str[i]; i++)
x = x*2 + str[i] % 2;
if(*op == '+') cnt[x]++;
else if(*op == '-') cnt[x]--;
else printf("%d\n",cnt[x]);
}
return 0;
}
#3
曼哈顿距离 直接找能围住图像的矩形周长
#include<bits/stdc++.h>
using namespace std;
const int N = 300010,INF = 1e9;
int n;
int x[N],y[N];
int main(){
scanf("%d",&n);
int u = -INF, d = INF, l = INF, r = -INF;
for(int i = 0;i < n;i++)
{
scanf("%d%d",&x[i],&y[i]);
u = max(u, y[i]), d = min(d, y[i]);
l = min(l, x[i]), r = max(r, x[i]);
}
int res = 0;
for(int i = 0;i < n;i++)
res = max(res,max(u - y[i],y[i] - d) + max(r - x[i],x[i] - l));
printf("%d ",res*2);
for(int i = 4;i <= n;i++){
printf("%d", 2 * (u - d + r - l));
}
return 0;
}