刚参加完NOIP2017普及,只考了210,于是心生不爽,写下了这篇解题报告。。。(逃

第一次写博,望dalao们多多指导啊(膜

第一题score,学完helloworld的人也应该都会吧,之前好多人0分或60分据说是精度炸了,后面不是又重测了么233

直接给代码

#include <stdio.h>
int a,b,c;
double a1,b1,c1;
int main()
{
    scanf("%d %d %d",&a,&b,&c);
    a1=a*0.2;
    b1=b*0.3;
    c1=c*0.5;
    printf("%.lf",a1+b1+c1);
    return 0;
}

许多人不会像我这么写而是除以10再去乘,毕竟都是是的整数倍

 

第二题librarian,这道题简单分析就考了个排序+取余,没什么技术含量,可是由于这个万恶的单词,有个原本265的大佬没拼对然后就gg到165,身边还有一个dalao第三题写了好多却只有十五分,然后第二题多打了个0然后内存就炸了。。。还有某位-1没有打\n。。。(同情

也是直接给代码吧

#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std; 
int a[1005];
int main()
{
    int n,q,b,c,i,j,s=1,ss=0;
    scanf("%d%d",&n,&q);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        sort(a,a+n);
        for(i=0;i<q;i++)
    {
        scanf("%d %d",&b,&c);
        s=1;ss=0;
        for(j=1;j<=b;j++)
            s=s*10;
        for(j=0;j<n;j++)
        {
            if(a[j]%s==c)
            {
                printf("%d\n",a[j]);
                ss=1;
                break;
            }    
        }
        if(ss==0)printf("-1\n");
    }
    return 0;
}

第三题…先给题目吧

 

 

 

 

 

 

 

这道题当我看题目时感觉挺简单的,只是觉得是一个普通的dfs+剪枝,可是当真正写的时候就不知道从何写,如何剪枝,然后调试了1小时。。。未果,注释矣。。。

之后,我写了一个单纯的dfs,纯搜,然后水了65分,代码如下

#include <stdio.h>
int m,n,i,sign=false,a[1001][1001],x,y,color;
long long ans=23333333333333;
void dfs(int x1,int y1,int magic,int money,int w_i_c)//w_i_c=What is the color?
{
    if(x1==m&&y1==m)
    {
        if(money<ans) ans=money;
        return ;
    }
    else
    {
        if(!magic)//当未施展魔法时 
        {
            if(x1+1<=m)//判边界条件 
            {
                if(a[x1+1][y1]>0)//当有颜色时 
                {
                    if(a[x1][y1]==a[x1+1][y1]) dfs(x1+1,y1,0,money,-1);
                    if(a[x1][y1]!=a[x1+1][y1]) dfs(x1+1,y1,0,money+1,-1);
                }//只需考虑颜色的变换 
                else if(a[x1+1][y1]==0) dfs(x1+1,y1,1,money+2,a[x1][y1]);
            }
            if(y1+1<=m)
            {
                if(a[x1][y1+1]>0)
                {
                    if(a[x1][y1]==a[x1][y1+1]) dfs(x1,y1+1,0,money,-1);
                    if(a[x1][y1]!=a[x1][y1+1]) dfs(x1,y1+1,0,money+1,-1);
                }
                if(a[x1][y1+1]==0) dfs(x1,y1+1,1,money+2,a[x1][y1]);//颜色就为上一个的颜色 
            }//同上 
        }
        else//当施展过魔法 
        {
            if(a[x1+1][y1]!=0)
            {
                if(a[x1+1][y1]==w_i_c) dfs(x1+1,y1,0,money,-1);
                if(a[x1+1][y1]!=w_i_c) dfs(x1+1,y1,0,money+1,-1);
            }
            if(a[x1][y1+1]!=0)
            {
                if(a[x1][y1+1]==w_i_c) dfs(x1,y1+1,0,money,-1);
                if(a[x1][y1+1]!=w_i_c) dfs(x1,y1+1,0,money+1,-1);
            }
        }
    }
}
int main()
{
    scanf("%d %d",&m,&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d %d %d",&x,&y,&color);
        a[x][y]=color+1;//其余为0表示无色,+1保证非负性 
    }
    dfs(1,1,0,0,-1);//分别代表横坐标,纵坐标,是否施展♂过魔♂法,钱,颜色;-1是一个特殊值 
    if(ans==23333333333333) printf("-1");//如果达到这个值就代表ans没有改变,说明到不了终点 
    else printf("%d",ans);
    return 0;
}

 

第四题说实话没怎么看懂…

粘上一个小学生20分的代码吧。。。

#include<stdio.h>
int sco[500001]={0},dis[500001]={0};
int main()
{
    int i,j,k,n,d,ans=0,flag,start;
    scanf("%d%d%d",&n,&d,&k);
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&dis[i],&sco[i]);
    }
    int sum=0;
    for(i=1;i<=n;i++)
    {
        if(sco[i]>0)
        {
            sum+=sco[i];
        }
    }
    if(sum<k)
    {
        printf("-1");
        return 0;
    }
    flag=1;
    while(1)
    {
        sum=0;start=0;
        ans++;
        if(ans<d)
        {
            for(i=1;i<=n;i++)
            {
                if(sco[i]>0&&dis[i]-start>=d-ans&&dis[i]-start<=d+ans)
                {
                    sum+=sco[i];
                    start=dis[i];
                    if(sum>=k)
                    {
                        printf("%d",ans);
                        return 0;
                    }
                }
            }
        }
        else
        {
            for(i=1;i<=n;i++)
            {
                if(sco[i]>0&&dis[i]-start>=1&&dis[i]-start<=d+ans)
                {
                    sum+=sco[i];
                    start=dis[i];
                    if(sum>=k)
                    {
                        printf("%d",ans);
                        return 0;
                    }
                }
            }
        }
    }
}

 

今天就到这里,以后我会多多写博,把自己的意见与大家分享,有不解或志同道合者可以加qq:2396389683,再见

 

版权声明:本文为noipzylfromxj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/noipzylfromxj/p/NOIP2017puji.html