A题:Legs
思路:根据题意直接写就好
#include<iostream>
using namespace std;
int t,n;
int main()
{
cin>>t;
while(t--)
{
cin>>n;
cout<<(n/4)+((n-((n/4)*4))/2)<<endl;
}
return 0;
}
B题:Scale
题目大意:给定你一个n*n的表格 ,让你输出缩小k倍后的样子。注意输出后的表格的每个单元格与原单元格价值对等
比如 第二个样例
#include<iostream>
#include<cstdio>
using namespace std;
int t,n,k;
const int N=1010;
char mc[N][N];
char ans[100010];
int main()
{
cin>>t;
while(t--)
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>mc[i][j];
}
}
int temp=0;
for(int i=1;i<=n;i+=k)
{
for(int j=1;j<=n;j+=k)
{
ans[temp++]=mc[i][j];
}
}
int cnt=0;
int cr=n/k;
for(int i=0;i<temp;i++)
{
cout<<ans[i];
cnt++;
if(cnt==cr)
{
cout<<endl;
cnt=0;
}
}
}
return 0;
}
C题:Sort
题目大意:给定你两个字符串 每次给定一个范围l<=r 在这个范围里 两个字符串的子串有几个不一样的字符 因为是一段 所以考虑前缀和 但有26个字母 所以考虑每个字母的前缀和
#include<iostream>
#include<vector>
using namespace std;
int n,q,t;
int main()
{
cin>>t;
while(t--)
{
cin>>n>>q;
vector<vector<int>> a(n+10,vector<int>(30));
auto b=a;
string grn,mc;
cin>>grn>>mc;
for(int i=1;i<=n;i++)
{
a[i][int(grn[i-1])-96]++;
b[i][int(mc[i-1])-96]++;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=26;j++)
{
a[i][j]+=a[i-1][j];
b[i][j]+=b[i-1][j];
}
}
while(q--)
{
int l,r;
cin>>l>>r;
int ans=0;
for(int i=1;i<=26;i++)
{
ans+=max(0,(a[r][i]-a[l-1][i])-(b[r][i]-b[l-1][i]));
}
cout<<ans<<endl;
}
}
return 0;
}