NOIp2018集训test-9-2(am)

本文分享了三道ACM竞赛题目:翻转合法数、选修课程最优组合及质数筛选问题的解决思路与代码实现,涉及贪心算法、排序、组合数计算等关键方法。

一场讲述谁比谁更傻逼的普及组比赛,证明了

1、老张是魔鬼(为什么有这么多套普及组题??)

2、我最傻逼

 

第 1 题 谜题

判断1~99哪些数翻转后合法,找到最长的连续合法段的长度,为4,所以n<=4输出Yes否则输出No

 1 //Achen
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdlib>
 6 #include<vector>
 7 #include<cstdio>
 8 #include<queue>
 9 #include<cmath>
10 #include<set>
11 #include<map>
12 #define Formylove return 0
13 #define For(i,a,b) for(int i=(a);i<=(b);i++)
14 #define Rep(i,a,b) for(int i=(a);i>=(b);i--)
15 typedef long long LL;
16 typedef double db;
17 using namespace std;
18 int n;
19 
20 template<typename T>void read(T &x)  {
21     char ch=getchar(); x=0; T f=1;
22     while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
23     if(ch=='-') f=-1,ch=getchar();
24     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
25 }
26 
27 
28 #define ANS
29 int main() {
30 #ifdef ANS
31     freopen("puzzle.in","r",stdin);
32     freopen("puzzle.out","w",stdout);
33 #endif
34     read(n);
35     if(n<5) puts("YES");
36     else puts("XLSB");
37     Formylove;
38 }
View Code

 

第 2 题 选修课

贪心,排序后选择最大的m个,看第m大的数后面有没有和它相同的数,把这些相同的数找出来组合数算答案即可。

 1 //Achen
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdlib>
 6 #include<vector>
 7 #include<cstdio>
 8 #include<queue>
 9 #include<cmath>
10 #include<set>
11 #include<map>
12 #define Formylove return 0
13 #define For(i,a,b) for(int i=(a);i<=(b);i++)
14 #define Rep(i,a,b) for(int i=(a);i>=(b);i--)
15 const int N=100007;
16 typedef long long LL;
17 typedef double db;
18 using namespace std;
19 int n,m,cnt[30];
20 LL C[30][30];
21 char s[N];
22 
23 template<typename T>void read(T &x)  {
24     char ch=getchar(); x=0; T f=1;
25     while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
26     if(ch=='-') f=-1,ch=getchar();
27     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
28 }
29 
30 bool cmp(const int &A,const int &B) {
31     return A>B;
32 }
33 
34 #define ANS
35 int main() {
36 #ifdef ANS
37     freopen("course.in","r",stdin);
38     freopen("course.out","w",stdout);
39 #endif
40     scanf("%s",s);
41     read(m);
42     n=strlen(s); 
43     For(i,0,n-1) cnt[s[i]-'a'+1]++;
44     sort(cnt+1,cnt+26+1,cmp);
45     LL ans1=0,ans2=0;
46     For(i,1,m) ans1+=cnt[i];
47     if(m==26||cnt[m]==0||cnt[m+1]<cnt[m]) ans2=1;
48     else {
49         For(i,0,26) C[i][0]=1;
50         For(i,1,26) For(j,1,i) C[i][j]=C[i-1][j]+C[i-1][j-1];
51         int tpa=0,tpb=0;
52         For(i,1,26) if(cnt[m]!=0&&cnt[i]==cnt[m]) tpa++;
53         For(i,1,m) if(cnt[i]!=0&&cnt[i]==cnt[m]) tpb++;
54         ans2=C[tpa][tpb];
55     }
56     printf("%lld %lld\n",ans1,ans2);
57     Formylove;
58 }
View Code

 

第 3 题 质数

搜根号以内的质数根号以外的贪心,不知道见过多少遍这种操作了。把数据范围看错了爆炸了。

 1 //Achen
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdlib>
 6 #include<vector>
 7 #include<cstdio>
 8 #include<queue>
 9 #include<cmath>
10 #include<set>
11 #include<map>
12 #define Formylove return 0
13 #define For(i,a,b) for(int i=(a);i<=(b);i++)
14 #define Rep(i,a,b) for(int i=(a);i>=(b);i--)
15 const int N=1007;
16 typedef long long LL;
17 typedef double db;
18 using namespace std;
19 int T,n,m,p[N],p2[N],cnt,ans,ok[N];
20 
21 template<typename T>void read(T &x)  {
22     char ch=getchar(); x=0; T f=1;
23     while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
24     if(ch=='-') f=-1,ch=getchar();
25     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
26 }
27 
28 #define ANS
29 int main() {
30 #ifdef ANS
31     freopen("prime.in","r",stdin);
32     freopen("prime.out","w",stdout);
33 #endif
34     read(T);
35     while(T--) {
36         read(n); read(m);
37         cnt=0; ans=0; 
38         int ansbs=0;
39         For(i,1,m) { 
40             read(p[i]); 
41             if(p[i]<=31) p2[++cnt]=p[i]; 
42         }
43         int up=(1<<cnt)-1;
44         For(i,0,up) {
45             int tpans=0;
46             memset(ok,0,sizeof(ok));
47             For(j,1,cnt) if(i&(1<<j-1)) {
48                 For(k,1,n/p2[j]) 
49                     ok[k*p2[j]]^=1;
50             }
51             For(j,1,m) if(p[j]>31) {
52                 int c1=0,c2=0;
53                 For(k,1,n/p[j]) {
54                     if(ok[k*p[j]]) c1++;
55                     else c2++;
56                 }
57                 if(c1<c2) {
58                     For(k,1,n/p[j]) ok[k*p[j]]^=1;
59                 }
60             }
61             For(i,1,n) tpans+=ok[i];
62             ans=max(ans,tpans);
63         }
64         printf("%d\n",ans);
65     }
66     Formylove;
67 }
68 /*
69 4
70 10 2
71 2 5
72 21 4
73 2 3 5 7
74 100 1
75 5
76 100 3
77 3 19 7
78 */
View Code

 

转载于:https://www.cnblogs.com/Achenchen/p/9573212.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预理或后理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值