NOIP普及组感想 by LiM_817

本次分享了初次参加NOIP的经历及心得,包括四道题目的解题思路和代码实现,特别是对于第三题未能找到最优解的遗憾。作者计划通过加强DP等知识点的学习来提升自己。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我第一次参加NOIP,距离省一还有15分的差距。不过这次也总结了一些经验与教训,免得下次再出错。
T1.
无话可说,半分钟AC。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
double a,b,c,score_; 
int main()
{
    cin>>a>>b>>c;
    score_=a*0.2+b*0.3+c*0.5;
    cout<<int(score_);
    return 0;
}

T2.
本题一开始觉得用桶排去重,但是后来放弃了。
用了一个sort来排,去重就break。
二重循环应该时间不会TLE吧。。。O(mn^2)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int get_num(int n)
{
    int ans=1;
    int a=n;
    while(a)
    {
        ans*=10;
        a--;
    }
    return ans;
}
int  book[1010],data[1010],num[1010],n,q,i,j,flag;
int main()
{
    cin>>n>>q;
    for(i=1;i<=n;i++)
    cin>>book[i];
    for(i=1;i<=q;i++)
        cin>>data[i]>>num[i];
    sort(book+1,book+1+n);
    for(i=1;i<=q;i++)
    {
        flag=0;
        for(j=1;j<=n;j++)
        {
            if(book[j]%get_num(data[i])==num[i])
            {
                cout<<book[j]<<endl;
                flag=1;
                break;
            }
        }
        if(flag==0)cout<<"-1"<<endl;
    }
    return 0;
}

T3.
前面两题都A了,结果第三题没写出正解,直接爆搜WA。
WA15:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[1110][1110],m,n,x,y,num;
bool could_solve(int stepx,int stepy)
{
    if(a[stepx+1][stepy+1]>=0)return true;
    return false;
}
void dfs(int stepx,int stepy,int m,int sum)
{
    if(stepx==m && stepy==m)
    {
        cout<<sum;
        return;
    }
    else if(a[stepx+1][stepy+1]<0&&a[stepx][stepy+1]<0&&a[stepx+1][stepy]<0)
    {
        cout<<"-1";
        return ;
    }
    else if(a[stepx][stepy+1]>=0||a[stepx+1][stepy]>=0)
    {
        if(a[stepx][stepy+1]==a[stepx][stepy]&&a[stepx][stepy+1]>=0)
        {
            dfs(stepx,stepy+1,m,sum);
        }
        else if(a[stepx][stepy+1]!=a[stepx][stepy]&&a[stepx][stepy+1]>=0)
        {
            sum++;
            dfs(stepx,stepy+1,m,sum);
        }
        else if(a[stepx+1][stepy]==a[stepx][stepy]&&a[stepx+1][stepy]>=0)
        {
            dfs(stepx+1,stepy,m,sum);
        }
        else if(a[stepx+1][stepy]!=a[stepx][stepy]&&a[stepx+1][stepy]>=0)
        {
            sum++;
            dfs(stepx+1,stepy,m,sum);
        }
    }
    else
    {
        if(could_solve(stepx,stepy))
        {
            sum+=2;
            a[stepx][stepy+1]=a[stepx][stepy];
            dfs(stepx,stepy+1,m,sum);
        }
        else 
        {
            cout<<"-1";
            return;
        }
    }
}
int main()
{
    memset(a,-1,sizeof(a));
    cin>>m>>n;
    for(int i=0;i<n;i++)
    {
        cin>>x>>y>>num;
        a[x][y]=num;
    }
    dfs(1,1,m,0);
    return 0;
}

本来记忆化搜索能拿满分

T4
不贴代码了,反正一点用也没有。
直接骗的分……
看CCF心情了

总结
这次肯定不够省一分数线(尽管很高),不过有些知识点不会比如dp,本蒟蒻还要继续练习!

加油加油加油!明年拿省一!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值