2018/7/17 刷题小结

codeforces.com

1.460A 买袜子

题意:败家南妮

个人代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int day=0,i=1,mm=m;
    while(n--){
        day++;
        if(day==1) n++;
        else{
            if(day-mm>0){
                n++;
                i++;
                mm=m*i;
            }
        }
    }
    printf("%d\n",day-1);
    return 0;
}

注意细节,按步模拟

2.677A 我和我的螃蟹朋友

题意:蹲下就看不见的世界,螃蟹无敌

个人代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int n,h;
    scanf("%d%d",&n,&h);
    int t,sum=n;
    for(int i=0;i<n;i++){
        scanf("%d",&t);
        if(t>h) sum++;
    }
    printf("%d\n",sum);
    return 0;
}

3.141A 字符串排序

题意:让string也sort起来

个人代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
    string a,b,c;
    cin>>a>>b>>c;
    a+=b;
    sort(a.begin(),a.end());
    sort(c.begin(),c.end());
    if(a.compare(c)==0) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    //cout<<a<<b<<c<<endl;
    return 0;
}

4.500A 钻洞真提莫好玩

题意:单向传送门

个人代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
    int n,t;
    int a[1000+5];
    scanf("%d%d",&n,&t);
    for(int i=1;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=1;i<n;i+=a[i]){
        if(i==t) break;
        else if(i>t){
            printf("NO\n");
            return 0;
        }
    }
    printf("YES\n");
    return 0;
}

超时,

网上抄的:

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int N=3e4+10;
vector<int>a[N];
bool vis[N];
int x;
void dfs(int x)
{
    vis[x]=1;//bool可以=1
    for(int i=a[x].size()-1;~i;i--){//i>=0
        int y=a[x][i];
        if(!vis[y])
            dfs(y);
    }
}
int main()
{
    int n,t;
    while(~scanf("%d%d",&n,&t)){
        for(int i=1;i<n;i++){
            scanf("%d",&x);
            a[i].push_back(i+x);
        }
        dfs(1);
        puts(vis[t]?"YES":"NO");
    }
    return 0;
}

还可以用于更多更复杂的情况,mark一下

5.379A 酒瓶换酒

题意:经典数学题

个人代码:

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int a,b;
    while(~scanf("%d%d",&a,&b)){
        int sum=a;
        while(a>=b){
            sum+=a/b;
            a=a%b+a/b;
        }
        printf("%d\n",sum);
    }
    return 0;
}

6.510A 蛇皮阵

题意:画个蛇

个人代码:

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m)){
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(i%2==0) printf("#");
                else if(i%4==1&&j==m-1) printf("#");
                else if(i%4==3&&j==0) printf("#");
                else printf(".");
            }
            printf("\n");
        }
    }
    return 0;
}

7.339B 这个人可能还想跑两圈

题意:跑步吧,应该

个人代码:

#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e5+10;
int main()
{
    int n,m;
    int a[N];
    long long sum=0;
    while(~scanf("%d%d",&n,&m)){
        for(int i=0;i<m;i++){
            scanf("%d",&a[i]);
            if(i==0) sum=a[0]-1;
            else{
                if(a[i]>=a[i-1])
                    sum+=(a[i]-a[i-1]);
                else
                    sum+=(n-a[i-1]+a[i]);
            }
        }
        printf("%I64d\n",sum);//不要lld,要不就cout
    }
    return 0;
}

8.82A 神经病啊,喝可乐分裂了

题意:谢耳朵不要钱了,不买几只吗

个人代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    long long n;
    while(~scanf("%I64d",&n)){
        int w=5;
        while(n>0){
            n-=w;
            w*=2;
        }
        w/=2;
        n+=w;
        double k=(double)n/w*1.0;
        if(k>0&&k<=0.2) printf("Sheldon\n");
        else if(k>0.2&&k<=0.4) printf("Leonard\n");
        else if(k>0.4&&k<=0.6) printf("Penny\n");
        else if(k>0.6&&k<=0.8) printf("Rajesh\n");
        else printf("Howard\n");
    }
    return 0;
}

答案错误,本地输入3与网上的答案不一样,为什么?操作系统不同的原因,不太明白

网上抄的:

#include <iostream>
using namespace std;
int cnt;
int sum(int cnt){
    int m=5,ma=1;
    for(int i=1;i<=cnt;i++)
        ma=ma*2, m=m+5*ma;
    return m;
}
int xn(int cnt){
    int y=1;
    for(int i=1;i<=cnt;++i)
        y=y*2;
    return y;
}
int main()
{
    int n;
    cin>>n;
    int x=5,y=1,res=0;
    if(n<6) res=n;
    else{
        cnt=0;
        while(n>sum(cnt)) cnt++;
        cnt--;
        n-=sum(cnt);
        res=(n-1)/xn(cnt+1)+1;
    }
    if(res==1) cout<<"Sheldon"<<endl;
    if(res==2) cout<<"Leonard"<<endl;
    if(res==3) cout<<"Penny"<<endl;
    if(res==4) cout<<"Rajesh"<<endl;
    if(res==5) cout<<"Howard"<<endl;
    return 0;
}

有点烦,不是自己写的看起来怪怪的,下次想个好点的

9.230A 杀龙不如杀鸡

题意:来一手结构体排序,就很捞

个人代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1e3+10;
struct dragon
{
    int x;
    int y;
}dra[N];
bool cmp(dragon a,dragon b)
{
    if(a.x!=b.x) return a.x<b.x;//返回预期结果为真的情况
    else return a.y>b.y;
}
int main()
{
    int s,n;
    while(~scanf("%d%d",&s,&n)){
        for(int i=0;i<n;i++)
            scanf("%d%d",&dra[i].x,&dra[i].y);
        sort(dra,dra+n,cmp);
        int flag=0;
        for(int i=0;i<n;i++){
            if(s>dra[i].x) s+=dra[i].y;
            else {
                flag=1;
                break;
            }
        }
        puts(flag?"NO":"YES");
    }
    return 0;
}

10.492B 路灯不是等分排布的吗。。。

题意:这条路要多亮的电灯泡才能拯救城规的脑子

个人代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1e3+10;
int a[N];
int main()
{
    int n,l;
    while(~scanf("%d%d",&n,&l)){
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        sort(a,a+n);
        int maxn=a[0]*2;
        for(int i=1;i<n;i++)
            maxn=max(maxn,(a[i]-a[i-1]));
        maxn=max(maxn,(l-a[n-1])*2);
        double d=(double)maxn/2;
        printf("%.10lf",d);
    }
    return 0;
}

11.705A 梦中梦中梦

题意:庄生晓梦迷蝴蝶

个人代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1e3+10;
int a[N];
void put1(const char *s)
{
    while(*s)
        putchar(*s++);
}
int main()
{
    int n;
    while(~scanf("%d",&n)){
        int m=n;
        put1("I hate ");
        while(n--){
            if(n==0) put1("it\n");
            else if((m-n)%2==1) put1("that I love ");
            else put1("that I hate ");
        }
    }
    return 0;
}

puts自动换行,以上是不换行的类似写法,注意putc是其他的东西,别记错了

12.455A 来啊,以钱赚钱

题意:付出与回报的利益最大化

个人代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=1e5;
int a[N];
int main()
{
    int n;
    while(~scanf("%d",&n)){
        memset(a,0,sizeof(a));
        int sum=0,x;
        for(int i=0;i<n;i++){
            scanf("%d",&x); a[x]++;
        }
        for(int i=1;i<N;i++){
            if(i==1){
                if(a[1]>=a[2]*2){
                   sum+=a[1]; a[2]=0; i++;
                }
            }
            else if(a[i]*i>=a[i-1]*(i-1)+a[i+1]*(i+1)){
                sum+=a[i]*i; a[i+1]=0; i++;
            }
            else{
                sum+=a[i-1]*(i-1)+a[i+1]*(i+1);
                a[i+1]=0; i++;
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

错误,完全不对,没想出好方法,准备抄了٩(๑`н´๑)۶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值