B1045
2021/7/28 6:06:02
本文主要是介绍B1045,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目描述
B1045
思路
1.前面最大的数<=主元素<=后面最小的数
2.找出所有位置的后面的最小的数,放入数组中,方便后续查找
3.找出前面最大的数,如果该数比前面最大的数小,则该数一定不是主元素
代码
#include<stdio.h> #include<algorithm> using namespace std; int main() { int n; int a[100000]; int num=0; //可能的主元个数 int ans[10000]; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } int max=a[0]; int right_min[100000]={0}; right_min[n-1]=a[n-1]; right_min[n-2]=a[n-1]; //找出每个元素右边最大的元素 for(int i=n-3;i>=0;i--) { if(a[i+1]<right_min[i+1]) { right_min[i]=a[i+1]; } else { right_min[i]=right_min[i+1]; } //printf("%d %d\n",a[i],right_min[i]); } for(int i=0;i<n;i++) { //找出a[i]左边最大的数 if(a[i]>=max) { max=a[i]; // if(a[i]<=right_min[i]) { //printf("*%d\n",a[i]); ans[num]=a[i]; num++; } } } sort(ans,ans+num); printf("%d\n ",num); for(int i=0;i<num;i++) { if(i==0) { printf("%d",ans[i]); } else { printf(" %d",ans[i]); } } printf("\n"); return 0; }
注意事项
1.使用sort()函数时不仅要加algorithm头文件还要加using namespace std;
2.本题最后不加回车的话有一个测试点过不了,出现格式错误
相似例题
B1040
代码
#include<stdio.h> #include<string.h> #define MAX 100000 #define MOD 1000000007 char a[MAX]; int main() { gets(a); //统计每一个位置左边p的个数; int left_p[MAX]={0}; int n=strlen(a); for(int i=0;i<n;i++) { //printf("%c-->",a[i]); if(i>0) { left_p[i]=left_p[i-1]; } if(a[i]=='P') { left_p[i]+=1; } //printf("%d\n",left_p[i]); } int total_PAT=0; int right_T=0; for(int i=n-1;i>=0;i--) { if(a[i]=='T') { right_T++; } if(a[i]=='A') { total_PAT=(total_PAT+left_p[i]*right_T)%MOD; } } printf("%d",(total_PAT%MOD)); return 0; }
注意事项
1.及时取模(在倒数第三个语句中要及时取模),否则在最后才取模的话会造成误差,导致结果错误。
2.思路精巧,统计A左边的P的个数和右边T的个数,用乘积得出PAT的个数,尽量少用嵌套循环。
这篇关于B1045的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20RabbitMQ教程:新手入门指南
- 2024-11-20Redis教程:新手入门指南
- 2024-11-20SaToken教程:新手入门指南
- 2024-11-20SpringBoot教程:从入门到实践
- 2024-11-20Java全栈教程:从入门到实战
- 2024-11-20Java微服务系统教程:入门与实践指南
- 2024-11-20Less教程:初学者快速上手指南
- 2024-11-20MyBatis教程:新手快速入门指南
- 2024-11-20QLExpress教程:初学者快速入门指南
- 2024-11-20订单系统教程:从入门到实践的全面指南