首页 > 其他分享 >3. [2002年NOIP普及组] 选数

3. [2002年NOIP普及组] 选数

时间:2022-08-24 21:59:11浏览次数:94  
标签:NOIP int 选数 per 2002 step num ans include

码学堂

洛谷

摘要:

从n个数里选k个作和,是素数的有多少个

分析:

这其实是要我们找全排列的无顺序子集、

子集:easy,位数改变为k即可

无顺序:

1.线性函数单调性(虽然看起来很高级但是不是最优的)

排序后数据顺次入栈,保证进入答案桶的每一个值都要大于前一个

2.改变for循环临界条件

排序(保证不会重复)  每次出栈后都从此元素的下一个元素入栈(初始条件)

从此元素开始计算个数(终止条件)

 

代码1:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm> 
 4 #include<cmath>
 5 using namespace std;
 6 //如何实现无序全排列?
 7 //进行排序,保证单调性即可 
 8 int n, k;
 9 int a[100];
10 struct dingyi{
11     int num;
12     int data;
13 }ans[100]; 
14 bool vis[100];
15 int cnt;
16 int endd;
17 void per(int step);
18 bool prime(int x);
19 int main()
20 {
21     cin>>n>>k;
22     for(int i=1;i<=n;i++)
23         cin>>a[i];
24     sort(a+1,a+n+1);
25         
26     per(1);//对应好!!! 
27 
28     cout<<cnt;
29     return 0;
30 }
31 int t=1;
32 void per(int step)
33 {
34     if(step==k+1)
35     {
36         endd=0;//赋初值 
37         for(int i=1;i<=k;i++)
38             endd+=ans[i].data;//检查++-- 
39         if(prime(endd)==1)
40             cnt++;
41         else return ;
42     }
43     for(int i=1;i<=n;i++)//循环a[1-n]//在i上动手脚? 
44     {
45         if(vis[i]==0&&a[i]>=ans[step-1].data&&i>ans[step-1].num)//第i个数没有被用过q且保证单调递增 //关于等号 
46         {
47             vis[i]=1;
48             ans[step].data=a[i];
49             ans[step].num=i;
50         
51             per(step+1);
52     
53             vis[i]=0;
54          } 
55      } 
56  } 
57 bool prime(int x)
58 {
59     for(int i=2;i<=sqrt(x);i++)
60     {
61         if(x%i==0) return 0;
62     }
63     return 1;
64 }

代码2见元首大人,没时间写了()

标签:NOIP,int,选数,per,2002,step,num,ans,include
From: https://www.cnblogs.com/xdzxxintong/p/16622387.html

相关文章

  • P5021 [NOIP2018 提高组] 赛道修建 思路简记
    发现答案具有单调性,尝试一下二分答案能不能做二分答案\(t\)后,问题的关键就变成最多能找到多少条长度大于等于\(t\)的赛道我们先假设整棵树以\(1\)为根把样例的图......
  • [2001年NOIP提高组] 数的划分
    为了确保出现过的方案不重复,可以规定在后面的分组中的数必须要大于前面分组中的数,x代表上一个出现过的数,初值为1,只要让下一个数从x开始循环,便可达成上述方案。s代表还需......
  • [2004年NOIP普及组] 火星人
    next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。这是一个......
  • [2004年NOIP普及组] 火星人
    [2004年NOIP普及组]火星人分析:根据题意,要在题中给出的排列组合的基础上,加上m,形成一个新的排列组合。因为全排列是按照从小到大的顺序进行的,所以我们可以转化为全排列问......
  • [NOIP2017 提高组] 奶酪
    题目链接:https://www.luogu.com.cn/problem/P3958试题分析:题目给出了球心坐标与半径,并且给出了奶酪高度,询问我们是否能从奶酪底部到奶酪顶部。我们可以分出以下几种情况:......
  • 雅礼NOIP2018集训 day5
    雅礼NOIP2018集训day5联题面由于出题人懒所以没有背景。一个无限长的01序列,初始全为0,每次选择一个区间[l,r]进行操作,有三种操作:•1lr将[l,r]中所有元素变......
  • NOIP模拟赛 繁星
    NOIP模拟赛繁星题面要过六一了,大川正在绞尽脑汁想送给小伙伴什么礼物呢。突然想起以前拍过一张夜空中的繁星的照片,这张照片已经被处理成黑白的,也就是说,每个像素只可能......
  • NOIP模拟赛 背包
    NOIP模拟赛背包题面NYG有一个神奇的背包,每放进去一个物品,背包的体积就会变大。也就是说,每放进一个物品,背包会被占用一定的体积,但是紧接着背包的总体积又会增大一定的值......
  • 1029 [NOIP2009]最优贸易 路径最小值最大值 spfa
    链接:https://ac.nowcoder.com/acm/contest/26077/1029来源:牛客网题目描述C国有n个大城市和m条道路,每条道路连接这n个城市中的某两个城市。任......
  • [NOIP2002 普及组] 选数
    题目链接:https://www.luogu.com.cn/problem/P1036试题分析:题目要求从n个数中任选k个数相加,求有多少种和为素数的情况。这道题我们运用的主要是深搜,其次还要写一个判断素数......