Educational Codeforces Round 93 (Rated for Div. 2) 题解
- 排序之后只用看第一个 第二个 和最后一个元素是否满足条件即可
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int N=5e4+10;
int t,n;
int a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
if(a[1]+a[2]<=a[n]){
cout<<"1 2 "<<n<<"\n";
}else{
cout<<"-1\n";
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
int t;
char s[110];
const int N=110;
int a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>s;
int now=0;
int len=strlen(s);
memset(a,0,sizeof(int)*(len+1));
s[len]='9';
s[len+1]=0;
len++;
int tlen=1;
for(int i=1;i<len;++i){
if(s[i]==s[i-1]){
tlen++;
}else{
if(s[i-1]=='1')a[now++]=tlen;
tlen=1;
}
}
sort(a,a+now);
int ans=0;
for(int i=now-1;i>=0;i-=2){
ans+=a[i];
}
cout<<ans<<"\n";
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int N=1e5+10;
ll t,n;
string s;
ll a[N];
ll sum[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>n;
cin>>s;
sum[0]=0;
map<ll,ll>rec;
set<ll>q;
//memset(rec,0,sizeof(rec));
for(ll i=0;i<n;++i){
a[i+1ll]=s[i]-'0';
sum[i+1ll]=sum[i]+a[i+1];
rec[sum[i+1ll]-(i+1ll)]++;
q.insert(sum[i+1ll]-(i+1ll));
}
rec[0]++;
ll ans=0;
// for(int i=0;i<=900000;++i){
// if(rec[i]>1){
// int p=rec[i];
// ans+=((p)*(p-1))/2;
// }
// }
for(auto i:q){
if(rec[i]>1ll){
int p=rec[i];
ans+=((p)*(p-1ll))/2ll;
}
}
cout<<ans<<"\n";
}
return 0;
}
- 一个三维dp,比赛的时候脑子不好使没想出来,知道是dp,但是不知道怎么写(我dp实在是太菜了)
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int N=210;
ll R,G,B;
ll r[N],g[N],b[N];
ll dp[N][N][N];
// ll calc(int x,int y)
// {
// return x*1ll*y*1ll;
// }
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>R>>G>>B;
for(ll i=1;i<=R;++i) cin>>r[i];
for(ll i=1;i<=G;++i) cin>>g[i];
for(ll i=1;i<=B;++i) cin>>b[i];
r[0]=g[0]=b[0]=-1;
sort(r+1,r+1+R);
sort(g+1,g+1+G);
sort(b+1,b+1+B);
ll ans=0;
ll x,y,z;
x=y=z=0;
for(ll i=0;i<=R;++i){
for(ll j=0;j<=G;++j){
for(ll k=0;k<=B;++k){
if(i&&j) x=dp[i-1][j-1][k]+r[i]*g[j];
if(j&&k) y=dp[i][j-1][k-1]+g[j]*b[k];
if(i&&k) z=dp[i-1][j][k-1]+r[i]*b[k];
dp[i][j][k]=max(max(x,y),z);
x=y=z=0;
ans=max(ans,dp[i][j][k]);
}
}
}
cout<<ans<<"\n";
return 0;
}