CCFCSP202109-2直接70分解法C++_IRONFISHER的博客-程序员秘密

技术标签: 算法  c++  算法刷题笔记  

2021_9第二题代码70分

这题没有想到比较好的100分解题思路。但是编译的时候还是有些地方错了,需要小心。
题目链接
在编码的时候碰到了问题。

  1. 首先using namespace std切记一定要加!不然就会编译错误!
  2. 然后,定义变量统一在开头!自己是因为忘了定义sumer结果编译出错又找了好久,另外在打for这些打时候同时要打{}以免忘记。
  3. <=>=不要打错,先比较后等号。
  4. 编码的时候一定要关注核心逻辑,得10分一般都是IO以及判断部分没有问题,数据处理与生成的逻辑有问题。
  5. 当然拿到题目需要先考虑一下得到满分的算法好不好做,会不会做。如果做不出来再考虑用暴力解法。
  6. 通常情况下push_back这种复杂度为O(1)的操作以及在函数中初始化vector都不会影响最终的结果。

看到这题首先的思路还是暴力法,但是自己耍了个小心眼,对输入的数据先进行排序,然后从小到大取数。比如:输入为 [ 3 , 1 , 2 , 0 , 0 , 2 , 0 , 4 , 5 , 0 , 2 ] [3,1,2,0,0,2,0,4,5,0,2] [3,1,2,0,0,2,0,4,5,0,2],排序并取独立值之后得到 [ 0 , 1 , 2 , 3 , 4 , 5 ] [0,1,2,3,4,5] [0,1,2,3,4,5],然后一个一个自小至大尝试,如果后一个比前一个小就退出,结果只得了10分。。发现是逻辑有问题,删掉那个逻辑之后得了70分。后面想了想其实也是有更好的方法的,因为这个本质上也可以用动态规划做。但是已经写了2个小时了,于是还是放弃。


#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;


bool charge(int i,int j,vector<int>arr){
bool flag1=false;
bool flag2=false;
bool flag3=false;
if(i>=0&&i<=j&&j<=arr.size()-1)flag1=true;
if(i==0||arr[i-1]==0)flag2=true;
if(j==arr.size()-1||arr[j+1]==0)flag3=true;
for(int k=i ;k<=j;k++){if (arr[k]<=0){return false;}}

if(flag1&&flag2&&flag3)return true;
return false;
};//判断代码,满足4个条件返回true.

vector<int> change(int changenum,vector<int> arr){
vector<int> newarr;
for(int i=0;i<arr.size();i++){
if (arr[i]<changenum){newarr.push_back(0);}else{newarr.push_back(arr[i]);}
}
return newarr;
};//把小于等于changenum的数都置0,输入一个新数组。

int getsum(vector<int> arr){
int sum=0;
int i=0;int j=0;int si=arr.size();
while(j<si){
if(charge(i,j,arr)){sum++;j+=2;i=j;}
else{if (arr[j]==0){j++;i=j;}else{j++;}}
}
return sum;
};//计算被删了之后的数组序列的个数


int main(void){
int num;
cin>>num;
vector<int> arr(num,0);
vector<int> arr2(num,0);
int i,j,temp;
for (i=0;i<arr.size();i++){
cin>>temp;
arr[i]=temp;
arr2[i]=temp;
}
sort(arr2.begin(),arr2.end());
vector<int> arr3;
arr3.push_back(arr2[0]);j=0;
for(i=1;i<arr2.size();i++){
if(arr3[j]==arr2[i]){continue;}else{arr3.push_back(arr2[i]);j++;}
}
//对数组里的数进行排序,自小到大,但是这个不会优化时间复杂度,所以其实没什么卵用。
int sumer=0;int num2;

if(arr3.size()==1&&arr3[0]==0){cout<<sumer<<endl;return 0;}
//边界值判断,其实没有也行
for (i=0;i<arr3.size();i++){
vector<int>newarr=change(arr3[i],arr);
num2=getsum(newarr);
if(sumer<=num2){sumer=num2;}
}//核心逻辑部分
cout<<sumer<<endl;


return 0;}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IRONFISHER/article/details/121524883

智能推荐

关于jupyter notebook无法自动跳转chrome浏览器的解决方法 晓物智联_52phm社区的博客-程序员秘密_jupyter notebook自动跳转浏览器

文章来源于:http://www.52phm.cn/blog/关于jupyter notebook无法自动跳转chrome浏览器的解决方法报错信息打开jupyter notebook后,不能跳转到浏览器Chrome。解决方法第一步打开anaconda prompt终端,输入以下命令jupyter notebook --generate-config第二步在C:/user/.jupyter文件下,找到jupyter_notebook_config.py,并将其打开。需要将验证效果和分析情况.

成功解决The following specifications were found to be incompatible with the existing python installation_一个处女座的程序猿的博客-程序员秘密

成功解决UnsatisfiableError: The following specifications were found to be incompatible with the existing python installation in your environment:解决问题Unsatisfiable Error: The following specifications were foundto be incompatible with the existing pytho

tfidf python 中文 实例_TechOnly1988的博客-程序员秘密_python 中文tfidf

from sklearn.feature_extraction.text import TfidfTransformerfrom sklearn.feature_extraction.text import CountVectorizerif __name__ == "__main__": corpus = ["我 来到 北京 清华大学", # 第一个文本切词后的结果,词之间以空格...

neo4j 数组属性(属性值有多个)______miss的博客-程序员秘密_neo4j 数组

1、多个属性值的设置语句match (m:公司{名称:["test3","test2"]}) return m2、多个属性的查询以及merge的使用OPTIONAL MATCH (n:公司) where "test3" in n.名称 WITH nwhere n is null merge (m:公司{名称:["test3","test2"]})return m(1)判断属性是否存在:直接用 "属性值 in 节点.属性名"的形式(2)merge和where不可以同时使用,.

LaTex 加粗(加黑)的方式_weixin_30876945的博客-程序员秘密

1. 基本LaTeX技巧458:关于LaTeX数学字体加粗$\mathbf $,会变为粗体,但也导致数学字母斜体形式的丢失;使用 amsmath package 的 \boldmath 命令;\boldmath$f(x,y) = 3(x+y)y / (2xy-7)$\unboldmath使用包,使用 bm package 的 \bm 命令...

随便推点

什么是快速开发框架?_yinmaisoft的博客-程序员秘密_快速开发框架是什么

前言作为一个程序员,在开发的过程中会发现,有框架同无框架,做起事来是完全不同的概念,关系到开发的效率、程序的健壮、性能、团队协作、后续功能维护、扩展......等方方面面的事情。很多朋友在学习搭建自己的框架,很多公司也在创建或使用自己的框架,网上开源的框架多如牛毛,每年新上线的各种框架也不知多少。而不停的重复造轮子,也让更多的朋友鸟枪换炮,越跑越快,工作效率越来越高。那么什么是快速开发框架呢?什么是快速开发框架快速开发框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例...

在Blender中使用代码控制人物模型的头部姿态 - 环境搭建_TheOldManAndTheSea的博客-程序员秘密

在Blender下使用Anaconda的Python环境flyfish前言:Anaconda下的Python环境可以使用PyTorch等深度学习框架,让Blender也能用深度学习框架。期望在Blender启动的时候加载的是Anaconda下的Python环境1. 查看自己Blender中Python的版本这里以Blender2.82举例可以在Editor Type-&gt;Python Conimposole查看或者shift+F4PYTHON INTERACTIVE CONSOLE 3.7

为什么说h5非常适合(促进)移动端的开发?_yingzizizizizizzz的博客-程序员秘密

转自这里:http://zhan.renren.com/wxcjyy?gid=3602888498062188491&checked=trueH5应用适合移动开发的几大特性  1.离线缓存为HTML5开发移动应用提供了基础   HTML5 Web Storage API可以看做是加强版的cookie,不受数据大小限制,有更好的弹性以及架构,可以将数据写入到本

oracle12兼容ojdbc6,oracle ojdbc6 使用 报错_盐选健康必修课的博客-程序员秘密

java -Djava.ext.dirs=./lib -classpath classes test.Test使用java.sql.SQLException: ORA-01005: null password given; logon deniedat oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:7...

利用 Create React Native App 快速创建 React Native 应用_xiangzhihong8的博客-程序员秘密

React Native App简介打开React Native官方文档你会发现,在Getting Started章节下新添加一个Quick Start Tab页。Quick Start是在v0.4.5版本添加的一种快速创建React Native App的方案,旨在为React Native开发者提供一种快捷的,无需配置任何工具,同时也无需安装XCode与AndroidStudio就可以开发...

bpmn2 vue 设计器_在vue中使用bpmn-js(一)_诺曼叔叔的博客-程序员秘密

由于之前的公司的项目中的工作流管理要用到流程图,而bpmn-js官方的文档是全英的而且使用的js框架是jQuery,可能是比较新的技术,官方也还在不断的更新,相关的文档或者资料很少很难找,只好自己不断爬坑填坑了。什么是bpmn-js?1.先从简单开始,能获取服务器上的流程图并显示出来:安装相关的依赖都是必须的,可以在官方文档上查看,在这里就不详细讲了。html: (界面很简单,这些都是必需的。)j...

推荐文章

热门文章

相关标签