题意
题解
代码
#include
using namespace std;
void solve() {
int n;cin>>n;
for(int i=0;i<n;i++){
int x; cin>>x;
}
n=10-n;
cout<<3*n*(n-1)<<'\n';
}
int main() {
int t; cin>>t;
while(t--) solve();
return 0;
}
题意
题解
代码
#include
using namespace std;
void solve() {
int n; cin>>n;
for(int i=1;i<=n;i++)
if(i&1) cout<<i<<' ';
for(int i=n;i>=1;i--)
if(i%2==0) cout<<i<<' ';
cout<<'\n';
}
int main() {
int t; cin>>t;
while(t--) solve();
return 0;
}
题意
题解
代码
#include
using namespace std;
const int N=2e5+10;
int a[N],sum[N];
char s[N];
void solve() {
long long res=0;
int n; cin>>n;
cin>>s+1;
int last=-1;
for(int i=1;i<=n;i++) {
cin>>a[i];
sum[i]=sum[i-1]+a[i];//前缀和,用于计算一段箱子书的和比较
}
for(int i=1;i<=n;i++) {
if(s[i]=='0') last=i;//上一个0的位置
else if(last!=-1) {//能移动的情况下
if(sum[i]-sum[last]<sum[i-1]-sum[last-1]) {//移动更优
s[i]='0'; s[last]='1';//那么移动,s中的盖子变化
last=i;//上一个0的位置变化
}
}
}
for(int i=1;i<=n;i++)//计算答案
if(s[i]=='1') res+=a[i];
cout<<res<<'\n';
}
int main() {
int t; cin>>t;
while(t--) solve();
return 0;
}
题意
题解
代码
#include
#include
#include
#include
using namespace std;
string erase_lead_zeros(string s) {//去除前导零
int i=0,len=s.size();
for(i=0;i<len-1;i++)
if(s[i]=='1') break;
return s.substr(i);
}
int main() {
int n; string s;
cin>>n>>s;
bitset<1000005> a(s),b(s);//bitset可以进行运算,而且还能和string互通有无
string ans=a.to_string();
for(int i=1;i<=50;i++)
ans=max(ans,(a | (b>>i)).to_string());
cout<<erase_lead_zeros(ans)<<'\n';
return 0;
}