Codeforces Round \ # 332 (Div. 2) 의 A, B, C, D

11200 단어 codeforces
E 문 제 를 봤 습 니 다. 문 제 는 dp 입 니 다.설마, 실력 이 강해 지면 다시 보충 하 자...
http://codeforces.com/contest/599/problem/A Patrick and Shopping 이라는 간단 한 4 가지 방법 을 비교 해 보면 좋 을 것 같 아 요.
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    int ans1=a+c+b;
    int ans2=a*2+b*2;
    int ans3=a*2+c*2;
    int ans4=b*2+c*2;
    cout<<min(min(ans1,ans2),min(ans3,ans4))<<endl;
    return 0;
}

http://codeforces.com/contest/599/problem/B 위 치 를 저장 하고 위치 가 유일 하 게 차지 되 는 지 살 펴 보면 된다.

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<map>
using namespace std;
int f[100100];
int b[100100];
int way[100100];
int who[100100];
int main()
{
    int n,m;
    cin>>n>>m;
    int test;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&f[i]);
        way[f[i]]++;
        who[f[i]]=i;
    }
    for(int j=1;j<=m;j++)
    {
        scanf("%d",&b[j]);
    }
    int ok=0;
    int ok2=0;
    for(int j=1;j<=m;j++)
    {
        if(!way[b[j]])
        {
            ok=1;
            break;
        }
        if(way[b[j]]>1)
        {
            ok2=1;
        }
    }
    if(ok)
    {
        cout<<"Impossible"<<endl;
    }
    else
    {
        if(ok2)
        {
            cout<<"Ambiguity"<<endl;
        }
        else
        {
            cout<<"Possible"<<endl;
            for(int i=1;i<=m;i++)
            {
                printf("%d ",who[b[i]]);
            }
        }
    }
    return 0;
}

http://codeforces.com/contest/599/problem/C Day at the Beach 인터넷 에서 누군가가 선분 나무 로 만 들 었 는데 나 는 선분 나 무 를 전혀 생각 하지 못 했다.지금 생각해 도 내 방식 이 너무 어 려.내 방법 은 각 구간 의 최대 치 와 최소 치 를 기록 한 후에 비교 하면 된다.
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int a[100100];
int flag[100100];
struct sb
{
    int maxn;
    int minn;
}all[100100];
int main()
{
    int n;
    cin>>n;
    int max1=0;
    int minwho=1;
    int len=0;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;i++)
    {
        if(a[i]>=all[len].maxn)
        {
            len++;
            all[len].maxn=a[i];
            all[len].minn=a[i];
        }
        else if(all[len].minn>a[i])
        {
            int testmax=all[len].maxn;
            while(len>1&&all[len].minn>a[i])
            {
                len--;
            }
            if(all[len].maxn<=a[i])
            len++;
            all[len].minn=a[i];
            all[len].maxn=testmax;
        }
    }
    cout<<len<<endl;
    return 0;
}

http://codeforces.com/contest/599/problem/D 스폰지 밥 앤 스 퀘 어 스 이 문 제 는 10 번 을 보 자마자 18 번...직감 적 으로 뿌리 를 내 려 야 한다 고 말 해 줘.그리고 안에 있 는 정사각형 수 를 계산 해 야 한다.문 제 를 보고 공식 을 제시 하 다.그리고 1 시간 뒤 문득 깨 닫 게 되 었 습 니 다. 자신 이 한 줄 한 줄 씩 그림 을 그리 면 알 수 있 습 니 다. =   3   *   m   *   n2   +   3   *   m   *   n   -   n3   +   n
그리고 매 거 하면 돼.
#include<cstdio>
#include<cstring>
#include<cmath>
#include<set>
#include<iostream>
using namespace std;
struct sb
{
    long long x;
    long long y;
    bool operator<(const sb &wakaka)const
    {
        return x<wakaka.x;
    }
}test;
set<sb>node;
int main()
{
    long long x;
    cin>>x;
    long long len=2*pow((double)x,(double)1/(double)3);
    //long long cnt=0;
    long long n=0;
    while(1)
    {
        n++;
        if(n>len)
            break;
        long long en=x*6;
        long long i2=(n-1)*n*(2*n-1);
        en=en-i2;
        long long he=(n-1)*n*3;
        en=en+he*n;
        long long la=6*n*n-he;
        if(en%la==0)
        {
            long long ans=en/la;
            test.x=n;
            test.y=ans;
            if(ans<n)
                break;
            node.insert(test);
            test.y=n;
            test.x=ans;
            node.insert(test);
            //cnt=cnt+2;
        }
    }
    cout<<node.size()<<endl;
    for(set<sb>::iterator it=node.begin();it!=node.end();it++)
    {
        test=*it;
        cout<<test.x<<" "<<test.y<<endl;
    }
    return 0;
}

좋은 웹페이지 즐겨찾기