备战NOIP2020——历年普及组第一题详解

Hello, 欢迎登录 or 注册!

/ 5评 / 0

本文作者:  本文分类:编程学习笔记  浏览:1676
阅读时间:835字, 约1-1.5分钟

为什么我只写普及组呢?

ANS:

按照我们现在的水平,报名参加提高组拿不到奖。 ——许洁


正文开始:

今天只讲 金币 和 珠心算测验这两道题。

这两道题在PJZT1中属于难题。其实还是简单

一. 金币。

https://www.luogu.com.cn/problem/P2669

看上去很难,其实很简单。

控制好循环就可以了。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int K,N,coin=0;
    cin>>K;             
    for(N=1;K-N>=0;K-=(N++))    
        coin+=N*N;               
    cout<<coin+K*N;
    return 0;
}

再给一种好理解一点的方法。

#include <bits/stdc++.h>
using namespace std;
int n;
long long ans;
int main()
{
	cin>>n;
	int h=0;
	for(int i=1;;i++) {
			ans+=i*i;
			h+=i;
			if(h>n){
				ans-=(h-n)*i;
				h=n;
			}
		if(h==n) break;
	}
	cout<<ans<<endl;
	return 0;
} 

二:珠心算测验

https://www.luogu.com.cn/problem/P2141

不多说。就是枚举

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,c,d,sum=0;
    int a[n],b[n];
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        cin>>a[i]; 
        b[i]=a[i];
    }
    for(int i=1;i<=n-1;i++)
    {
        c=a[i];
        for(int j=i+1;j<=n;j++)
        {
            d=a[j];  
            for(int k=1;k<=n;k++)
            {
                if( b[k] == c+d) 
                {
                    sum++; 
                    b[k] = 0;
                }
            } 
        }
    }
    cout<<sum; 
    return 0; 
}

总结:

历年PJZ的T1都是很简单的,做对就有100分,(基本上就有二等奖)。

所以一定要仔细,不能出错。

关于作者

  1. Rolling_Code说道:

    简单,不如分析一下T4(

  2. EricNTH说道:

    2020年8月2日10:25 审核通过

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注