2020年第一场NOI Online入门组

2020年第一场NOI Online入门组

P1424. 文具订购

题目: 文具订购
文具订购
前置数学知识(可参考下题): 若p,q两数互质,即(p,q)=1,则p和q不能凑出来的最大数是(p-1)(q-1)-1,例如p=4,q=3,那么p和q不能凑出来的最大数是5,也就是说所有比5大的数都可以被3和4表示出来,那么此题不能被表示的数只有1,2,5(0可以被表示)

因为成套数越多越好,我们假设最多k套,则n-14k一定比20小,因为如果n-14k>=20我们就一定还可以再买一套并且剩下的钱能够被凑出来(比5大),那么此时k就不是最优解了,矛盾,因此在k为最优解的前提下,n-14k一定比20小,此时我们不一定能再买一套,因为如果再买一套不一定能保证钱全部用光

整体思路: 一开始k= ⌊ n 14 ⌋ \lfloor \frac{n}{14}\rfloor 14n,当r=n-14k=1/2/5时,我们再拿出14凑给r,这样r=15/16/19<20,就一定可以满足要求了,然后再循环枚举abc即可,此时r一定比20小,因此时间复杂度极低
代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=20;
int s[3];
int n;
int main(){
   
	scanf("%d",&n);
	if(n==1||n==2||n==5) puts("-1");
	else{
   
		int k=n/14;
		int r=n-14*k;
		if(r==1||r==2||r==5){
   //此时要再拿一个14凑给r
			k--;
			r+=14;
		}
		memset(s,-1,sizeof(s));
		for(int a=0;a*7<=r;a++){
   
			for(int b=0;a*7+b*4<=r;b++){
   
				if((r-a*7-b*4)%3==0){
   
					int c=(r-a*7-b*4)/3;
					if(s[0]==-1||a+b+c>s[0]+s[1]+s[2]){
   
						s[0]=a;
						s[1]=b;
						s[2]=c;
					}
				}
			}
		}
		printf("%d %d %d\n",k+s[0],k+s[1],k+s[2]);
	}
	return 0;
}

P525. 小凯的疑惑

题目: 小凯的疑惑
上题数学结论裸题
代码:

#include <iostream>
#include <cstring>
#include <algorithm>
typedef long long LL;
using namespace std;
LL a, b;
int main()
{
   
    scanf("%lld%lld", &a, &b);
    LL res=(a-1)*(b-1)-1;
    printf("%lld",res);
    return 0;
}

P1425. 跑步

题目: 跑步
P900. 整数划分升级版,整数划分两种方法时间复杂度均为O( n 2 n^2 n2),本题要求做到O(nlogn)或O(n√n)
一个问题经过函数的方法转化,更有利于研究,因为已经有很多关于函数的定理了
母函数
思路: 我们记n=0的方案数为 P 0 P_0 P0,n=1的方案数为 P 1 P_1 P1,n=2的方案数为 P 2 P_2 P2,······以此类推一直到 P n P_n Pn (该序列记成{ P n P_n Pn})
则该数列的生成函数为: f ( x ) = P 0 x 0 + P 1 x 1 + P 2 x 2 + ⋯ + P n x n f(x)=P_0x^0+P_1x^1+P_2x^2+⋯+P_nx^n f(x)=P0x0+P1x1+P2x2++Pn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为给选手提供一个锻炼的机会,CCF拟举办一场NOI Online能力测试。测试分为入门和提高,每限额报名3万人,人数报满关闭系统,每成功报名选手在同一时间参加线上测试。 一、测试时间: 提高:3月7日8:30-12:00 入门:3月7日14:30-18:00 二、测试方式: 1.选手报名成功后,根据系统生成的准考证号和密码登陆测试系统。 2.测试试题均采用电子版,每3道题目。选手在线提交源程序,测试系统离线统一评测。 三、报名资格及时间: 1.因本次测试为限额参加,为给更多选手机会,每位选手限报名一测试。如每人数报满,系统会提前关闭。曾在CSP-J/S2019第二轮获一级的选手具有优先权。 2.分阶段报名: 第一阶段为CSP-J/S2019第二轮一级选手报名,时间:即日起至2月20日24:00截止; 第二阶段为开放报名,时间:2月21日-26日24:00截止。 四、报名方式: 1.测试费用:免费 2.报名网址:http://rg.noi.cn/(点击下载使用说明) 3.参加者请如实填写个人信息报名,包括但不限于姓名、身份证号、出生日期、性别、就学(学籍学校)/就职单位等。 4.测试前公布选手对应的动态地址,请关注邮件及NOI网站通知。 五、评测及成绩 本次测试不评奖、不颁发证书。3月20日前公示测试成绩前25%名单 六、咨询邮箱:noi@ccf.org.cn 此通知。 中国计算机学会 20202月17日

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值