class Solution {
public:
int numberOfCuts(int n) {
if(n==1)return 0;
if(n%2)return n;
else return n/2;
}
};
class Solution {
public:
vector<vector<int>> onesMinusZeros(vector<vector<int>>& g) {
int n=g.size(),m=g[0].size();
vector<vector<int>>res(n,vector<int>(m));
for(int i=0;i<n;i++)
{
int a=0,b=0;
for(int j=0;j<m;j++)
if(g[i][j])a++;
b=m-a;
for(int j=0;j<m;j++)
res[i][j]+=a-b;
}
for(int i=0;i<m;i++)
{
int a=0,b=0;
for(int j=0;j<n;j++)
if(g[j][i])a++;
b=n-a;
for(int j=0;j<n;j++)
res[j][i]+=a-b;
}
return res;
}
};
class Solution {
public:
static const int N=1e5+10;
int s1[N],s2[N];
int a[N],b[N];
int bestClosingTime(string s) {
int n=s.size();
vector<int>v(n+10);
for(int i=0;i<n;i++)
if(s[i]=='Y')v[i+1]=1;
else v[i+1]=0;
for(int i=1;i<=n;i++)
{
if(v[i]==0)s1[i]=1;
else s1[i]=0;
}
for(int i=n;i;i--)
{
if(v[i]==1)s2[i]=1;
else s2[i]=0;
}
for(int i=1;i<=n;i++)s1[i]+=s1[i-1];
for(int i=n;i;i--)s2[i]+=s2[i+1];
int res=0x3f3f3f3f;
int idx=0;
for(int i=1;i<=n+1;i++)
{
if(res>s1[i-1]+s2[i])
{
res=s1[i-1]+s2[i];
idx=i-1;
}
}
return idx;
}
};
预处理前缀后缀,乘法原理
typedef long long LL;
class Solution {
public:
static const int mod=1e9+7;
static const int N=1e4+10;
int s[N][10][10],r[N][10][10];
int countPalindromes(string str) {
int n=str.size();
int cnt[10]={0};
for(int i=1;i<=n;i++)
{
for(int j=0;j<10;j++)
for(int k=0;k<10;k++)
s[i][j][k]=s[i-1][j][k];
int y=str[i-1]-'0';
for(int j=0;j<10;j++)
s[i][j][y]+=cnt[j];
cnt[y]++;
}
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
r[n+1][i][j]=0;
memset(cnt,0,sizeof cnt);
for(int i=n;i;i--)
{
for(int j=0;j<10;j++)
for(int k=0;k<10;k++)
r[i][j][k]=r[i+1][j][k];
int y=str[i-1]-'0';
for(int j=0;j<10;j++)
r[i][y][j]+=cnt[j];
cnt[y]++;
}
int res=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<10;j++)
for(int k=0;k<10;k++)
res=(res+(LL)s[i-1][j][k]*r[i+1][k][j])%mod;
}
return res;
}
};