首页 > 代码库 > CF 750

CF 750

今天CF打的块残废了     就是一废物

A 在24点之前到 直接模拟即可

#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>

using namespace std;

#define LL long long
#define MAXN 1010
#define inf  1000000000.0

int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    int ans=0;
    int i;
    for(i=1;i<=n;i++)
    {
        if(ans+5*i+k>240)
        {

            break;
        }
        else
            ans = ans +5*i;
    }
     printf("%d\n",i-1);
    return 0;
}

  B

  显然东西是没用的  但是在南北极就出问题了

  从北极点开始 最后要回到北极点

  在北极点 只能往南边 南极同理  不然就有问题

  然后 40000 不能随便%掉  因为可能走到一边点 然后还是这个方向  就翻车了

  就分类讨论   唉    翻车翻车

  

技术分享
#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>

using namespace std;

#define LL long long
#define MAXN 1010
#define inf  1000000000.0

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int ans=0;
        int ok=0;

        for(int i=1;i<=n;i++)
        {
            int a;
            char s[65];
            scanf("%d %s",&a,s);
            if(s[0]==N)
            {
                if(20000-ans+a>20000)
                    ok=1;
            }
            if(s[0]==S)
            {
                if(ans+a>20000)
                    ok=1;
            }
            a=a%40000;
            if(ans ==0&&s[0]!=S||ans==20000&&s[0]!=N)
                ok=1;
            if(s[0]==N)
            {
                if(ans ==0)
                {
                    if(a<=20000)
                    {
                        ans = ans +a;
                    }
                    else
                    {
                        ans = 20000 - (a-20000);
                    }

                }
                else if(ans<20000)
                {
                    if(ans >=a)
                    {
                        ans =ans -a;
                    }
                    else
                    {
                        a-=ans;
                        ans =0;
                        if(a<=20000)
                            ans =ans +a,a=0;
                        else
                            ans =20000,a=a-20000;
                        if(a>0)
                            ans =20000-a;
                    }
                }
                else if(ans ==20000)
                {
                    if(a<=20000)
                        ans =ans-a;
                    else
                    {
                        ans=0;
                        a=a-20000;
                        if(a>0)
                            ans = a;
                    }
                }
            }
            else if(s[0]==S)
            {
                if(ans ==0)
                {
                    if(a<=20000)
                        ans =a;
                    else
                    {
                        ans =20000 -(a-20000);
                    }
                }
                else if(ans <20000)
                {
                    if(a<=20000-ans)
                        ans = ans +a;
                    else
                    {
                        a=a-(20000-ans);
                        ans =20000;
                        if(a<=20000)
                            ans = 20000-a;
                        else
                        {
                            ans =0;
                            a=a-20000;
                            if(a>0)
                                ans = a;
                        }
                    }
                }
                else if(ans==20000)
                {
                    if(a<=20000)
                        ans =20000-a;
                    else
                    {
                        ans =0;
                        a=a-20000;
                        if(a>0)
                            ans =ans +a;
                    }
                }
            }
            ans = ans %40000;
            if(ans >20000)
                ans =ans -20000;
        }
        if(ans==0&&ok!=1)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
View Code

  C

  >=1900  去DIV1

  否则去           2

  从头开始维护 一个左右边界

  写一个不等式  就是维护的 然后判断结果

  

技术分享
#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>

using namespace std;

#define LL long long
#define MAXN 210010
#define inf  1000000000

int a[MAXN],b[MAXN];

int main()
{
    int l,r,n;

    while(scanf("%d",&n)!=EOF)
    {
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&a[i],&b[i]);
        }
        l=-inf;
        r=inf;
        int c=0;
        for(int i=1;i<=n;i++)
        {
            if(b[i]==1)
            {
                l=max(l,1900-c);
            }
            else
            {
                r=min(r,1900-c);
            }
            c=c+a[i];
        }
        r--;
        if(r==inf-1)
            printf("Infinity\n");
        else if(l>r)
            printf("Impossible\n");
        else
        {
            for(int i=1;i<=n;i++)
                r=r+a[i];
            printf("%d\n",r);
        }
    }
    return 0;
}
View Code

 

  

CF 750