首页 > 其他分享 >NOIP2015普及组复赛参考解析

NOIP2015普及组复赛参考解析

时间:2022-10-21 11:23:25浏览次数:87  
标签:NOIP2015 int 普及 long P2672 cnt 解析 复赛

目录

题目传送

P2669 [NOIP2015 普及组] 金币

  • 简单题,可以画个图
    image

  • 需要注意是否需要开 long long

  • \({(1+n)*n}/{2}=1e4 ==> n<2e2\)

  • \(2e2*1e4 = 2e6\) 无需 long long。

  • 若扩大数据范围,就需要longlong以及利用公式优化了

点击查看代码
#include<bits/stdc++.h>
using namespace std;

int main() {
    int k,cnt=0, ans=0; cin>>k;
    for(int i=1; cnt<k; i++){
        // for(int j=1; j<=i && cnt<k; j++) {
        //     ans+=i, cnt++;
        // }
        if(cnt+i<=k) ans+=i*i, cnt+=i;// 可以优化
        else { ans+=i*(k-cnt); break; }
    }
    cout<<ans;
    return 0;
}

P2670 [NOIP2015 普及组] 扫雷游戏

  • 开心游戏,为了简化,可以开 dis[][2] 数组记录方向
  • 枚举每个点,如果不是地雷,查询九宫格内的地雷数量。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110,INF=0x3f3f3f3f;
int n,m,dis[][2]={-1,-1, -1,0, -1,1, 0,-1, 0,1, 1,-1, 1,0, 1,1};
string s[N];

int main() {
    cin>>n>>m;
    for(int i=0; i<n; i++) cin>>s[i];
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            if(s[i][j]=='?'){
                int cnt=0;
                for(int k=0; k<8; k++){
                    int tx=i+dis[k][0], ty=j+dis[k][1];
                    if(tx<0||tx>=n||ty<0||ty>=m) continue;
                    if(s[tx][ty]=='*') cnt++;
                }
                s[i][j]=cnt+'0';
            }
        }
    }
    for(int i=0; i<n; i++) cout<<s[i]<<endl;
    return 0;
}

P2671 [NOIP2015 普及组] 求和

P2672 [NOIP2015 普及组] 推销员

标签:NOIP2015,int,普及,long,P2672,cnt,解析,复赛
From: https://www.cnblogs.com/hellohebin/p/16812838.html

相关文章