A简单模拟
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2e5+10;
void DYH(int n)
{
int res=n/4,d=n%4;
if(d!=0)res++;
cout<<res<<endl;
}
int main()
{
int t;scanf("%d",&t);
for(int l=0;l<t;l++)
{
int n;cin>>n;
DYH(n);
}
return 0;
}
B简单模拟
注意:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1000+10;
char a[N][N];
int main()
{
int t;cin>>t;
while(t--)
{
int n,k;cin>>n>>k;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
for(int i=0;i<n;i=i+k)
{
for(int j=0;j<n;j=j+k)
{
cout<<a[i][j];
}
cout<<endl;
}
}
return 0;
}
C动态规划(补题)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2e5+10;
//字符串a中,pa[i][j]在前i个字符中,字母j出现的次数
int pa[N][26];
//字符串b中,pb[i][j]在前i个字符中,字母j出现的次数
int pb[N][26];
void solve()
{
int n,q;cin>>n>>q;
string a,b;cin>>a>>b;
memset(pa, 0, sizeof pa);
memset(pb, 0, sizeof pb);
pa[1][a[0]-'a']=1;
for(int i=2;i<=n;i++)
{
for(int j=0;j<26;j++)
{
//前i个字符出现字母j的次数=
//本次字符==j,则=前i-1个字符出现字母j的次数+1;
//本次字符!=j,则=前i-1个字符出现字母j的次数;
if(a[i-1]-'a'==j)pa[i][j]=pa[i-1][j]+1;
else pa[i][j] = pa[i-1][j];
}
}
pb[1][b[0]-'a']=1;
for(int i=2;i<=n;i++)
{
for(int j=0;j<26;j++)
{
if(b[i-1]-'a'==j)pb[i][j]=pb[i-1][j]+1;
else pb[i][j]=pb[i-1][j];
}
}
while(q--)
{
int l,r;cin>>l>>r;
int res=0;
for(int i=0;i<26;i++)
{
//[l,r]间出现j的次数==前r个字符中出现j的次数-前l-1个字符中出现j的次数
int sa=pa[r][i]-pa[l-1][i],sb=pb[r][i]-pb[l-1][i];
res=res+max(0,sa-sb);
}
printf("%d\n",res);
}
}
int main()
{
int t;cin>>t;
while(t--)
{
solve();
}
return 0;
}