A:legs
![](https://i-blog.csdnimg.cn/direct/fd683ea1881b41e39d3a9eb5e0c304ec.png)
思路:
先买牛,剩下的买羊
#include<bits/stdc++.h>
using namespace std;
#define fir first
#define sec second
#define endl "\n"
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
const int N = 1e5 + 10, M = N * 2, mod = 1e9 + 7, inf = 0x3f3f3f3f, P = 131;
void solve()
{
int n;
cin >> n;
int a=n/4;
int b=(n%4)/2;
cout<<a+b<<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
cin >> t;
while(t --)
solve();
return 0;
}
B:Scale
思路:
直接每隔k行,k列输出就可以
#include<bits/stdc++.h>
using namespace std;
#define fir first
#define sec second
#define endl "\n"
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
const int N = 1e5 + 10, M = N * 2, mod = 1e9 + 7, inf = 0x3f3f3f3f, P = 131;
void solve()
{
int n,k;
cin >> n >> k;
string s[n];
for(int i=0;i<=n;i++)
cin >> s[i];
for(int i=0;i<n;i+=k){
for(int j=0;j<n;j+=k){
cout<<s[i][j];
}
cout<<endl;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
cin >> t;
while(t --)
solve();
return 0;
}
C:Sort
思路:
一说区间查询,第一时间想到前缀和,此题便是字符的前缀和
#include<bits/stdc++.h>
using namespace std;
#define fir first
#define sec second
#define endl "\n"
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
const int N = 2e5 + 10, M = N * 2, mod = 1e9 + 7, inf = 0x3f3f3f3f, P = 131;
string s="abcdefghijklmnopqrstuvwxyz";//用来统计字符的位置
void solve()
{
int n,q;
cin >> n >> q;
vector<vector<int>>sa(n+1,vector<int>(26,0));//上串字符
vector<vector<int>>sb(n+1,vector<int>(26,0));//下串字符
string a,b;
cin >> a >> b;
vector<int> ssa(26,0);
vector<int> ssb(26,0);
for(int i=0;i<n;i++){
int ta=s.find(a[i]);
ssa[ta]++;
sa[i+1]=ssa;
int tb=s.find(b[i]);
ssb[tb]++;
sb[i+1]=ssb;
}
while(q--){
int l,r;
cin >> l >> r;
int ans=0;
for(int i=0;i<26;i++)
ans+=abs((sa[r][i]-sa[l-1][i])-(sb[r][i]-sb[l-1][i]));
cout<<ans/2<<endl;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
cin >> t;
while(t --)
solve();
return 0;
}
D:Fun
思路:
题意很简单,要想不会爆掉,就要优化时间复杂度,给的范围为1e6,所以a的最大也就1e3,直接枚举a和b,去找c即可
#include<bits/stdc++.h>
using namespace std;
#define fir first
#define sec second
#define endl "\n"
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
const int N = 1e6 + 10, M = N * 2, mod = 1e9 + 7, inf = 0x3f3f3f3f, P = 131;
void solve()
{
int n,x;
cin >> n >> x;
int ans=0;
for(int i=1;i<=sqrt(n);i++){
for(int j=i;j<=sqrt(n);j++){
int kt=min(x-i-j,(n-i*j)/(i+j));
if(kt>=j){
if(i==j){
ans+=3*(kt-j+1);
ans=ans-2;
}
else{
ans+=6*(kt-j+1);
ans-=3;
}
}
}
}
cout<<ans<<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
cin >> t;
while(t --)
solve();
return 0;
}