2017----ccpc秦皇岛

原定周三晚的时长3小时的比赛!在比赛刚结束的时候。lsd(老傻蛋)A了一个题!然后就十分可耻的!将比赛延长到五个小时!!!幸好过了20多分钟我们也A了,,,然后就赶紧回宿舍 了,,,

一开始我就读了G,差不多有了思路,,但是数太大,到1e1000了,,,我这java都要考试了,,但是没学大数,自己看了一点,但是没有学会,,只能传给荆大傻子,再想想思路代码什么的。

然后我先做的L,,我上来就是一发CE,,,语言重置成C的了。。

L,是个大水题

L代码:

#include<bits/stdc++.h>
using namespace std;
char ch[100005];
int T,l,r,n,m;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        scanf("%s",ch);
        l=r=0;
        for(int i=1;i<=m-1;i++)
        {
            if(ch[i]=='R') l++;
        }
        for(int i=m-1;i<=n-2;i++)
        {
            if(ch[i]=='L') r++;
        }
        printf("%d\n",min(l,r));
    }

    return 0;
}

荆大傻子又做C,WA了一发,然后A了

C也比较水

C代码:

#include<bits/stdc++.h>
using namespace std;

int T,l,r,n,m,ans,all;
int dfs(string S,string SS)
{
    int l,t=0;
    string x,s;
    s=SS;
    for(int i=0;i<=2;i++)
    {
        l=s.size();
        for(int j=0;j<l;j++)
        {
            if(j>=l-2&&s[j]!=S[i]) x+=s[j];
            else if(s[j]==S[i])
            {
                if(s[j+1]==s[j]&&s[j+2]==s[j])
                {j+=2;t++;}
                continue;
            }
            else x+=s[j];
        }
         s=x;
         //cout<<S<<" "<<s<<" "<<t<<" "<<x<<endl;
         x="";
    }
    return t;
}
int main()
{
    string ch[10];
    char chh[20];
    scanf("%d",&T);
    ch[0]="ago";
    ch[1]="aog";
    ch[2]="gao";
    ch[3]="goa";
    ch[4]="oag";
    ch[5]="oga";
    while(T--)
    {
        ans=1;
        scanf("%s",chh);
        for(int i=0;i<=5;i++)
        {
            ans=max(ans,dfs(ch[i],chh));
        }
        printf("%d\n",ans);
    }

    return 0;
}

然后队友做E,WA了一发后,我做M,

M是个概率的,比较好推,但是有个细节没注意,也WA了,

然后队友该E,A了

M代码:

#include<bits/stdc++.h>
using namespace std;

char s[200050];

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,i,ans=0;
        scanf("%d",&n);
        scanf("%s",s);
        bool f=0;
        if(n<3)
        {
            printf("0\n");
            continue;
        }
        for(i=0;i<n;i++)
        {
            if((i+3<n)&&s[i]=='C'&&s[i+1]=='C'&&s[i+2]=='P'&&s[i+3]=='C')
                ans++;
            if(!f)
            {
                if((i+3<n)&&s[i]=='P'&&s[i+1]=='C'&&s[i+2]=='P'&&s[i+3]=='C')
                    f=1;
                if((i+3<n)&&s[i]=='C'&&s[i+1]=='C'&&s[i+2]=='P'&&s[i+3]=='P')
                    f=1;
                if((i+3<n)&&s[i]=='C'&&s[i+1]=='C'&&s[i+2]=='C'&&s[i+3]=='C')
                    f=1;
            }
        }
        if(s[0]=='C'&&s[1]=='P'&&s[2]=='C')
            f=1;
        if(s[n-3]=='C'&&s[n-2]=='C'&&s[n-1]=='C')
            f=1;
        if(s[n-3]=='C'&&s[n-2]=='C'&&s[n-1]=='P')
            f=1;
        if(f)
            ans++;
        printf("%d\n",ans);
    }
    return 0;
}

然后队友做G代码,我继续纸上改M

又WA了两发,找到特殊情况后就A了

M代码:

#include<bits/stdc++.h>
using namespace std;

int T,n,m,R,r,ans[115],num;
double z;
struct AA
{
    int x,y,id;
    double d;
    bool operator<(const AA&aa) const
    {
        return d<aa.d;
    }
}pos[115];
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        num=0;
        scanf("%d%d%d",&n,&R,&r);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&pos[i].x,&pos[i].y);
            pos[i].d=sqrt(pos[i].x*pos[i].x*1.0+pos[i].y*pos[i].y*1.0);
            pos[i].id=i;
        }
        sort(pos+1,pos+1+n);
        ans[++num]=pos[1].id;
        z=(R-r-r);
        if(pos[1].d<z||(fabs(pos[1].d-z)<=0.000000000001))
        {
            for(int i=2;i<=n;i++)
            {
                if(pos[i].d>z) break;
                ans[++num]=pos[i].id;
            }
        }
        else
        {
            z=2*r-R;
            if(pos[1].d<z||(fabs(pos[1].d-z)<=0.000000000001))
            {
                for(int i=2;i<=n;i++)
                {
                    if(pos[i].d>z) break;
                    ans[++num]=pos[i].id;
                }
            }
            else
            {
                for(int i=2;i<=n;i++)
                {
                    if(pos[i].d>pos[1].d) break;
                    ans[++num]=pos[i].id;
                }
            }

        }
        sort(ans+1,ans+1+num);
        printf("%d\n",num);
        for(int i=1;i<num;i++)
        {
            printf("%d ",ans[i]);
        }
        printf("%d\n",ans[num]);
    }

    return 0;
}

然后我们一起做G。。我的思路,但是不会Java大数,,不得不一起做

细节又出了点问题,,WA了三发后终于A了,

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    public static BigInteger b[]=new BigInteger[5050];

    public static int f(BigInteger o)
    {
        int l=0,r=5000,mid=-1;
        while(true)
        {
            if(mid==(l+r)/2)
                break;
            mid=(l+r)/2;
            if(o.compareTo(b[mid])>0||o.equals(b[mid]))
                l=mid;
            else
                r=mid;
        }
        return mid;
    }

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int T=in.nextInt();
        BigInteger x=BigInteger.ONE;
        b[0]=BigInteger.ONE;
        for(int i=1;i<=5000;i++)
        {
            b[i]=x.multiply(BigInteger.valueOf(2));
            x=b[i];
        }
        while(T-->0)
        {
            BigInteger n,m,ans,t,tt;
            n=in.nextBigInteger();
            m=in.nextBigInteger();
            ans=BigInteger.ZERO;
            if(n.equals(BigInteger.ZERO))
            {
                System.out.println("0");
                continue;
            }
            if(n.compareTo(m)<0||n.equals(m))
            {
                System.out.println("1");
                continue;
            }
            while(true)
            {
                t=n.divide(m);
                if((n.mod(m)).equals(BigInteger.ZERO))
                {
                    ans=ans.add(t);
                    break;
                }
                int y=f(t);
                if((b[y+1].subtract(BigInteger.ONE)).equals(t))
                    y=y+1;
                ans=ans.add(b[y]);
                tt=n;
                n=n.subtract((b[y]).multiply(m));
                if(n.compareTo(BigInteger.ZERO)<0)
                    n=tt.mod(b[y]);
                //System.out.println(n+" "+m+" "+ans);
                if(n.equals(BigInteger.ZERO))
                break;
                if(n.compareTo(m)<0||n.equals(m))
                {
                    ans=ans.add(BigInteger.ONE);
                    break;
                }

            }
            System.out.println(ans);
        }
    }
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值