Codeforces 라운드 # 625 (사업부. 2, 2020 Technocup 최종 라운드 기준) 【A, B, C 题】

로봇에 대한 A. 대회

출석 문제는, 특별한주의가 선고 될 수있다.

#include <bits/stdc++.h>
using namespace std;
const int N=110;
int n,s1,s2,ans,a[N],b[N];
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
        if(a[i]==1&&b[i]==0)s1++;
        else if(a[i]==0&&b[i]==1)s2++;
    }
    if(s1==0)printf("-1\n");
    else if(s1>s2)printf("1\n");
    else
    {
        if(s2%s1==0)ans=s2/s1+1;
        else ans=(int)ceil(1.0*s2/s1);
        printf("%d\n",ans);
    }
    return 0;
}

B. 여행 계획

엄격 증가 서열로부터 공지 된 서열과 임의의 두 인접하는 요소의 순서에서의 차이를 찾아 질문되는 의미하는 원래 시퀀스에서의 위치의 차이와 동일하다 모두 추구 서브 시퀀스 요소의 조건을 충족시키고 최대.

조성식 조건 : A1 서열 두 인접한 A2의 요구에 부합 요소 (위치가 POS1, POS2이다)
갖는 A1-A2-POS2 POS1 = ( A1 <A2, 엄격 증가), 이조을 A1-A2-POS1 = POS2있다. 만큼 POS1 <POS2 같은 확실히 보유 A1 <A2, 상기 (A)의 모든 배열로 다시 [I] -i들이 만나 (A)에 설정 될 수있는 동일한 나타내는 A [i]를 -i를 원래의 시퀀스를 통과하는 것만이 필요하다 서열 조건. A [i]를 제외 -i가 발생할 수 있기 때문에, 열 수있을 때지도 어레이의 최대 값을 찾는 것이 더 편리 이송 후에.

(나 자신에 대해 Tucao 원하는, B 타이틀을하지 않았다하는 C 타이틀을 할 수있는이 시간. 전에 복잡 원하는, 펜윅 나무의도 순서 최대 DP 방향 희망을 증가 보러 가고, 반, 세트를 원하거나 생각 유지 보수 요소 위치가 ... 라인에 나중에 발견 된 전위가, 정말 QAQ이 ... codeforces의 법에 따라, B는 기본적으로 생각하는 문제의 간단한 질문입니다, 그것도 대해 너무 복잡하게 생각하지 것이다)

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
map<ll,ll>vis;
ll n,mx,a[N];
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        vis[a[i]-i]+=a[i];
    }
    for(auto it:vis)
        mx=max(mx,it.second);
    //注意it遍历容器(而不是迭代器),访问容器类型的值是it.second而不是it->second

    //等价于
    /*for(auto it=vis.begin();it!=vis.end();it++)
        mx=max(mx,it->second);*/  //这里是迭代器访问,所以是 -> 符号
    printf("%lld\n",mx);
    return 0;
}

새로운 수확

지도를 통과하는 두 가지 방법 ( "게으른"이 될 수는 적은 조금 작성 후)이있다

for(auto it:vis)
cout<<it.second<<endl;//注意it遍历容器(而不是迭代器),访问容器类型的值是it.second而不是it->second
for(auto it=vis.begin();it!=vis.end();it++)
cout<<it->second<<endl;//这里是迭代器访问,所以是 -> 符号

첫 번째 방법은 마주 트래버스 대장을 표현, 주목 값 맵에 액세스 할 때 (점) 기호, 이유는

루프 .FOR 1) 유형 브로 표준 : IS 쌍. 따라서 val.second 용기, 또는이 상관 관계지도 val.first 추출에 필요한 키.
2) .auto 감독이 자동으로 오히려 반복자보다 형 컨테이너 VALUE_TYPE을 밀었다.
(참고 기사 : 루프의 범위에 따라 C ++ 11 연구 노트 )

C. 제거를 인접에게

질문의 의미하는 것은 자신의 ascci 작은 1야드 이상의 인접 문자에서 문자가 긴만큼, 당신에게 소문자를 포함하는 문자열, 당신은 문자를 찾을 수있는 모든 시간을 제공하는 것입니다, 당신은 물어 문자를 삭제할 수 있습니다 당신은 최대 번호를 삭제할 수 있습니다.

데이터의 양 라인에 매우 직접적인 폭력 시뮬레이션 100 만, 매우 작기 때문에. 사 전적으로 큰 문자를 삭제, 조금 생각 탐욕 추가 주문, Z는 (자신의 소문자 존재하지 않는 작은 1 이상의 코드 ascci) 삭제 나 편지에 편지에서이다. 문자열이 한 번 이송 될 횡단 정의의이 상황 bbbba의 유산을 방지하기 위해 때 긍정적이고 부정적인 관심이있다.

#include <bits/stdc++.h>
using namespace std;
string s;
char ch;
int n,ans,vis[150];
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>ch;
        s+=ch;
        vis[ch]++;
    }
    for(ch='z';ch>='b';ch--)
    {
        if(!vis[ch])continue;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]==ch)
            {
                if((i+1<s.size()&&s[i]-1==s[i+1])||(i-1>=0&&s[i]-1==s[i-1]))
                    s.erase(s.begin()+i),i--,ans++;
            }
        }
        for(int i=s.size()-1;i>=0;i--)//反向遍历,防止bbbba这种情况误判
        {
            if(s[i]==ch)
            {
                if((i+1<s.size()&&s[i]-1==s[i+1])||(i-1>=0&&s[i]-1==s[i-1]))
                    s.erase(s.begin()+i),i++,ans++;
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}
게시 84 개 원래 기사 ·은 (125)처럼 원 · 보기 40000 +를

추천

출처blog.csdn.net/ljw_study_in_CSDN/article/details/104604656