Educational Codeforces Round 93 (Rated for Div. 2) (ABCD)
                                            
 35464 단어  dpcf채계의 실연(시련)
                    
A. Bad Triangle  
제목:  
승차순 하나 드릴게요.물음: 삼각형이 될 수 없는 트리플 (삼원조) 이 존재하는지 여부입니다.
아이디어:  
가장 작은 두 변과 가장 큰 변을 취하다.a【1】+a【2】<=a【n】시 조건을 만족시킨다.
AC  #include  
using namespace std;
const int maxn=5e4+10;
int a[maxn];
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        int ans=-1;
        int n;cin>>n;
        for(int i=1; i<=n; i++)cin>>a[i];
        if(a[1]+a[2]<=a[n])ans=1;
        if(ans==1)cout<<1<<' '<<2<<' '<<n<<endl;
        else cout<<ans<<endl;
    }
    return 0;
}
  
B. Substring Removal Game  
제목:  
01열에는 다음과 같은 작업이 있습니다.
승차순 하나 드릴게요.물음: 삼각형이 될 수 없는 트리플 (삼원조) 이 존재하는지 여부입니다.
아이디어:  
가장 작은 두 변과 가장 큰 변을 취하다.a【1】+a【2】<=a【n】시 조건을 만족시킨다.
AC  #include  
using namespace std;
const int maxn=5e4+10;
int a[maxn];
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        int ans=-1;
        int n;cin>>n;
        for(int i=1; i<=n; i++)cin>>a[i];
        if(a[1]+a[2]<=a[n])ans=1;
        if(ans==1)cout<<1<<' '<<2<<' '<<n<<endl;
        else cout<<ans<<endl;
    }
    return 0;
}
  
B. Substring Removal Game  
제목:  
01열에는 다음과 같은 작업이 있습니다.
#include  
using namespace std;
const int maxn=5e4+10;
int a[maxn];
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        int ans=-1;
        int n;cin>>n;
        for(int i=1; i<=n; i++)cin>>a[i];
        if(a[1]+a[2]<=a[n])ans=1;
        if(ans==1)cout<<1<<' '<<2<<' '<<n<<endl;
        else cout<<ans<<endl;
    }
    return 0;
}
  B. Substring Removal Game  
제목:  
01열에는 다음과 같은 작업이 있습니다.
01열에는 다음과 같은 작업이 있습니다.
한 사람당 한 번씩 조작하고 번갈아 오다.(최종 점수는 1을 뺀 개수).
질문:앨리스의 점수를 구하다
아이디어:
01이 이렇게 된다면 틀림없이 가지 않을 것이다0. 왜냐하면 갔기 때문이다0. 그러면 상대는 11가 없어질 수 있기 때문이다.)AC  #include  
#include  
#include  
#include  
using namespace std;
char s[200];
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        vector<int>v;
        cin>>(s+1);
        int len=strlen(s+1);
        int cnt=0,flag=0;
        for(int i=1; i<=len; i++){
            if(s[i]=='1')cnt++,flag=1;
            else {
                if(cnt)v.push_back(cnt);
                cnt=flag=0;
            }
        }
        if(cnt)v.push_back(cnt);
        sort(v.begin(),v.end());
        int ed=v.size()-1;
        int ans=0;
        for(int i=ed; i>=0; i-=2)ans+=v[i];
        cout<<ans<<endl;
    }
    return 0;
}
  
C. Good Subarrays  
제목:  
good subarray          。구:good subarray가 몇 개 있어요?
아이디어:  
#include  
#include  
#include  
#include  
using namespace std;
char s[200];
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        vector<int>v;
        cin>>(s+1);
        int len=strlen(s+1);
        int cnt=0,flag=0;
        for(int i=1; i<=len; i++){
            if(s[i]=='1')cnt++,flag=1;
            else {
                if(cnt)v.push_back(cnt);
                cnt=flag=0;
            }
        }
        if(cnt)v.push_back(cnt);
        sort(v.begin(),v.end());
        int ed=v.size()-1;
        int ans=0;
        for(int i=ed; i>=0; i-=2)ans+=v[i];
        cout<<ans<<endl;
    }
    return 0;
}
제목:  
good subarray          。구:good subarray가 몇 개 있어요?
아이디어:  
          。(이 조건은 간소화할 수 있고 구간 안의 모든 수는 1을 줄일 수 있다. 만약에 조건이 충족된다면 이 구간의 합은 0이어야 한다)는 것을 간소화할 수 있다.ii i를 종점으로 하는 하위 서열에는 몇 개의 good subarray가 있다.eg1 :11111 pre[1]=0, pre[2]=0, pre[3]=0, pre[4]=0, pre[5]=0 ans=1(i=1)+2(i=2)+3(i=3)+4(i=4)+5(i=5).
eg2: 110202 pre[1]=0, pre[2]=0, pre[3]=-1, pre[4]=0, pre[5]=-1, pre[2]=0, ans= 1+2+0+3+1+4
AC  #include  
#include  
#include 
#include  
using namespace std;
typedef long long ll;
const int maxn=9e5+10;
ll pre[maxn];//,sum[maxn];
char s[maxn];
map<int,int>ma;
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        int n;cin>>n;
        cin>>(s+1);
        ma.clear();
        pre[0]=0;//sum[0]=0;
        for(int i=1; i<=n; i++)pre[i]=pre[i-1]+s[i]-'0'-1;
        ll ans=0;
        ma[0]=1;
        for(int i=1; i<=n; i++)ans+=ma[pre[i]]++;
        cout<<ans<<endl;
    }
    return 0;
}
  
D. Colored Rectangles  
제목:  
r변, g변, b변이 있습니다.두 개의 조합 직사각형.구: a n s = ∑p a r e a ans=\sumparea ans=∑parea. 
아이디어:  
단순 상태
#include  
#include  
#include 
#include  
using namespace std;
typedef long long ll;
const int maxn=9e5+10;
ll pre[maxn];//,sum[maxn];
char s[maxn];
map<int,int>ma;
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        int n;cin>>n;
        cin>>(s+1);
        ma.clear();
        pre[0]=0;//sum[0]=0;
        for(int i=1; i<=n; i++)pre[i]=pre[i-1]+s[i]-'0'-1;
        ll ans=0;
        ma[0]=1;
        for(int i=1; i<=n; i++)ans+=ma[pre[i]]++;
        cout<<ans<<endl;
    }
    return 0;
}
제목:  
r변, g변, b변이 있습니다.두 개의 조합 직사각형.구: a n s = ∑p a r e a ans=\sumparea ans=∑parea. 
아이디어:  
단순 상태
단순 상태
AC  #include  
#include  
#include  
using namespace std;
typedef long long ll;
ll a[4][300];
ll dp[300][300][300];
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    ll col[4];
    cin>>col[1]>>col[2]>>col[3];
    for(int i=1; i<=3; i++){
        for(int j=1; j<=col[i]; j++)cin>>a[i][j];
    }
    ll ans=0;
    for(int i=1; i<=3; i++)sort(a[i]+1,a[i]+1+col[i]);
    for(int i=col[1]; ~i; i--){
        for(int j=col[2]; ~j; j--){
            for(int k=col[3]; ~k; k--){
                dp[i][j][k]=max(dp[i][j][k],dp[i+1][j+1][k]+(ll)a[1][i+1]*a[2][j+1]);//1,2
                dp[i][j][k]=max(dp[i][j][k],dp[i+1][j][k+1]+(ll)a[1][i+1]*a[3][k+1]);//1,3
                dp[i][j][k]=max(dp[i][j][k],dp[i][j+1][k+1]+(ll)a[3][k+1]*a[2][j+1]);//2,3
            }
        }
    }
    for(int i=col[1]; ~i; i--){
        for(int j=col[2]; ~j; j--){
            for(int k=col[3]; ~k; k--){
                ans=max(dp[i][j][k],ans);
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}
                
                    
        
    
    
    
    
    
                
                
                
                
                
                
                    
                        
                            
                            
                                
                                    
                                    이 내용에 흥미가 있습니까?
                                
                            
                            
                            
                            현재 기사가 여러분의 문제를 해결하지 못하는 경우  AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
                            
                                
                                【경쟁 프로 전형적인 90문】008의 해설(python)
                            
                            의 해설 기사입니다.
해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다.
※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다.
문자열...
                            
                            
                            
                            
                            텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
                            
                        
                    
                
                
                
            
#include  
#include  
#include  
using namespace std;
typedef long long ll;
ll a[4][300];
ll dp[300][300][300];
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    ll col[4];
    cin>>col[1]>>col[2]>>col[3];
    for(int i=1; i<=3; i++){
        for(int j=1; j<=col[i]; j++)cin>>a[i][j];
    }
    ll ans=0;
    for(int i=1; i<=3; i++)sort(a[i]+1,a[i]+1+col[i]);
    for(int i=col[1]; ~i; i--){
        for(int j=col[2]; ~j; j--){
            for(int k=col[3]; ~k; k--){
                dp[i][j][k]=max(dp[i][j][k],dp[i+1][j+1][k]+(ll)a[1][i+1]*a[2][j+1]);//1,2
                dp[i][j][k]=max(dp[i][j][k],dp[i+1][j][k+1]+(ll)a[1][i+1]*a[3][k+1]);//1,3
                dp[i][j][k]=max(dp[i][j][k],dp[i][j+1][k+1]+(ll)a[3][k+1]*a[2][j+1]);//2,3
            }
        }
    }
    for(int i=col[1]; ~i; i--){
        for(int j=col[2]; ~j; j--){
            for(int k=col[3]; ~k; k--){
                ans=max(dp[i][j][k],ans);
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.