A
有 a 首 1分钟的歌,b 首 2 分钟的歌,c首 3 分钟的歌。要分在两场音乐会,问最小的差是多少。
***题,一来就应该猜结论,不应该瞎搞瞎搞,想的太复杂。最后如果差值为 2 或者 3 ,都可以转化,或者说有更优的分法。
代码:
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define endl '\n'
typedef long long ll;
const int N=5e5+10;
const int M=1e6+7;
ll n,m,k;
void solve(){
ll a,b,c;
cin>>a>>b>>c;
cout<<(a+b*2+c*3)&1<<endl;
}
int main(){
int T;
cin>>T;
while(T--){
solve();
}
}
B
B很明显的一看就有思路的,要使和为sum-1;那肯定就是统计 数组中有多少个 1,0.
由题意,最多只能删除一个 1 ,若干个 0 ,所以答案就为 * ,注意long long
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define endl '\n'
typedef long long ll;
const int N=5e5+10;
const int M=1e6+7;
ll n,m,k;
int a[N];
void solve(){
cin>>n;
ll x,c1=0,c2=0;
for(int i=0;i<n;i++){
cin>>x;
if(x==1) c1++;
if(x==0) c2++;
}
cout<<c1*(1ll<<c2)<<endl;
}
int main(){
//cout<<1ll*(1ll<<59)<<endl;
int T;
cin>>T;
while(T--){
solve();
}
}
C
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define endl '\n'
typedef long long ll;
const int N=5e5+10;
const int M=1e6+7;
ll n,m,k;
int check(string& s, char c)
{
int l = 0, r = s.length()-1;
int res = 0;
while(l<r)
{
if(s[l] == s[r]) {l++,r--;continue;}
if(s[l]!=s[r] && s[l] == c){l++; res++;continue;}
if(s[l]!=s[r] && s[r] == c){r--; res++;continue;}
return 1e6;
}
return res;
}
void solve()
{
int ans = 1e6;
int n;cin>>n;
string s;cin>>s;
for(char c = 'a'; c <= 'z'; c++)
ans = min(ans, check(s, c));
cout<<(ans==1e6 ? -1 : ans) << '\n';
}
int main(){
//cout<<1ll*(1ll<<59)<<endl;
int T;
cin>>T;
while(T--){
solve();
}
}
D
构造B数组使得, 等于0
-
首先如果 n为偶数,很容易构造,每两个数之间,a[i], a[i+1] 可以构造出
-
n 为奇数,那么我们就需要构造出三个数,, 我们可以构造出 ,前提得满足 ,不满足就换一对数
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define endl '\n'
typedef long long ll;
const int N=5e5+10;
const int M=1e6+7;
ll n,m,k;
int a[N];
void solve(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
if(n%2==0){
for(int i=0;i<n;i+=2) cout<<-a[i+1]<<" "<<a[i]<<" ";
cout<<endl;
}
else{
if(a[1]+a[2]!=0){
cout<<(a[1]+a[2])<<" "<<-a[0]<<" "<<-a[0]<<" ";
}
else if(a[0]+a[2]!=0){
cout<<-a[1]<<" "<<a[0]+a[2]<<" "<<-a[1]<<" ";
}
else if(a[0]+a[1]!=0){
cout<<-a[2]<<" "<<-a[2]<<" "<<a[0]+a[1]<<" ";
}
for(int i=3;i<n;i+=2){
cout<<-a[i+1]<<" "<<a[i]<<" ";
}
cout<<endl;
}
}
int main(){
int T;
cin>>T;
while(T--){
solve();
}
}