Codeforces Round #735 (Div. 2)
Codeforces Round #735 (Div. 2)
A. Cherry
枚举相邻两个数即可。
容易想到,对于一个长度大于2的区间\([l, r]\),设其中最大值为\(a_i\),不妨另i<r。易知\(min(a_t)*a_i<=a_i*(a_{i+1}), (l<=t<=r)\),所以只需要枚举长度为二的区间即可即相邻两个数即可。
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pr;
const ll MAXN=1e18;
const int MOD=1e6;
int main(){
int t,n;
cin>>t;
while(t--){
cin>>n;
ll pre,nex,ans=0;
cin>>pre;
for(int i=2;i<=n;++i){
cin>>nex;
ans=max(ans,nex*pre);
pre=nex;
}
cout<<ans<<'\n';
}
return 0;
}
B. Cobb
考虑到\(k*(a_i|a_j)\)的值相对于\(n*n\)很小,所以只要枚举最后一段区间即可,我是枚举\(200*200\)。
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pr;
const ll MAXN=1e18;
const int MOD=1e6;
ll aa[100005],nex[100005];
void solve(){
int n;
ll k;
cin>>n>>k;
for(int i=1;i<=n;++i){
cin>>aa[i];
}
ll ans=-2e18;
for(int i=max(1,n-200+1);i<=n;++i){
for(int j=i+1;j<=n;++j){
ans=max(ans,(ll)i*j-k*(aa[i]|aa[j]));
}
}
cout<<ans<<'\n';
}
int main(){
IOS;
int t;
cin>>t;
while(t--)
solve();
}
C. Mikasa
如果\(k=n⨁x, 即k⨁n=x, x∈[0, m],\) 那么k就存在序列中
也就是说如果\(0<=k⨁n<=m\),那么k就存在于序列中。
我们要找到最小的\(k\)不满足\(0<=k⨁n<=m\)即最小的k满足\(k⨁n>=m+1\)
看了这位dalao的博客https://www.cnblogs.com/Tenshi/p/15078889.html
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pr;
const ll MAXN=1e18;
const int MOD=1e6;
int main(){
int t;
cin>>t;
while(t--){
int n,m;
scanf("%d%d", &n, &m);
++m;
int ans=0;
if(n>=m) {
printf("0\n");
continue;
}
else{
for(int i=29;i>=0;--i){
int w=(n>>i)&1,k=(m>>i)&1;
if(w==k) continue;
else{
if(k==1){
ans+=1<<i;
}
else break;
}
}
}
printf("%d\n", ans);
}
return 0;
}
D. Diane
构造,我的话长度小于等于3特判一下。
大于3,如果为偶数,就形如aaabaaaa
如果为奇数,就形如aaabcaa。
b与bc起分割作用,这种构造方法保证左右两边只含a的等长子串数目加起来正好是奇数。
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pr;
const ll MAXN=1e18;
const int MOD=1e6;
void solve(){
int n;
scanf("%d", &n);
if(n==1) puts("a");
else if(n==2) puts("ab");
else if(n==3) puts("abc");
else{
if(n&1){
for(int i=1;i<=n/2-1;++i) putchar('a');
putchar('b');
putchar('c');
for(int i=1;i<=n/2;++i) putchar('a');
puts("");
}
else{
for(int i=1;i<=n/2;++i) putchar('a');
putchar('b');
for(int i=1;i<=n/2-1;++i) putchar('a');
puts("");
}
}
}
int main(){
int t;
scanf("%d", &t);
while(t--)
solve();
return 0;
}