A.c(10-n) 2 *3即可
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;cin>>n;
for(int i=1;i<=n;i++){
int x;cin>>x;
}
int d=10-n;int sum=0;
sum=d*(d-1);
cout<<sum*3<<'\n';
}
int main(){
int t;cin>>t;
while(t--){
solve();
}
}
B. 把1和2分别放在两边即可
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;cin>>n;
cout<<1<<" ";
for(int i=n;i>2;i--){
cout<<i<<" ";
}
cout<<2<<" ";
cout<<'\n';
}
int main(){
int t;cin>>t;
while(t--){
solve();
}
}
C. 由于这个盖子只能往前走一步 所以从前向后遍历一遍即可
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;cin>>n;
int a[n];
string s;cin>>s;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=0,j=-1;i<n;i++){
if(s[i]=='0')j=i;
else if(j>=0&&a[i]<a[j]){
swap(s[i],s[j]);
j=i;
}
}
long long ans=0;
for(int i=0;i<n;i++){
if(s[i]=='1')ans+=a[i];
}
cout<<ans<<'\n';
}
int main(){
int t;cin>>t;
while(t--){
solve();
}
}
D. s1 肯定是去除前导0的整穿 s2就是第一段连续的1 由于是随机数 所以直接暴力就好了(仰慕一下榜一的代码吧 ,自己写的太丑了 )如果不是随机数要用KMP
#include <bits/stdc++.h>
using i64 = long long;
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n;
std::cin >> n;
std::string s;
std::cin >> s;
if (s.find('1') == std::string::npos) {
std::cout << 0 << "\n";
return 0;
}
int a = s.find('1');
if (s.substr(a).find('0') == std::string::npos) {
std::cout << s.substr(a) << "\n";
return 0;
}
int b = a + s.substr(a).find('0');
auto ans = s;
for (int i = 0; i <= b - a; i++) {
auto res = s;
for (int j = 0; j + i < n; j++) {
res[j + i] |= s[j];
}
ans = std::max(ans, res);
}
ans = ans.substr(ans.find('1'));
std::cout << ans << "\n";
return 0;
}