本次更新内容:2.17质因数算法 1.4编译设置纠错
目录
1.1 取消同步(节约时间,甚至能多骗点分,最好每个程序都写上)
2.3 最大公约数(greatest common divisor,gcd)和最小公倍数(least common multiple,lcm)
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#include <bits/stdc++.h>
(1)工具->编译选项->编译器->编译时加入以下命令->调成C99

(2)工具->编译选项->代码生成/优化->代码生成->语言标准

按照字节对内存块进行初始化,注意只能填充0或-1
#include <bits/stdc++.h>
using namespace std;
int a[10];
int main()
{
memset(a,-1,sizeof(a));
for(int i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
可以填充任意数字
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int arr[10];
fill(arr, arr + 10, 2);
return 0;
}
蓝桥杯每一道题编译时间都限制在1s以内,遇到数据比较大的题目,往往需要降低时间复杂度。

由于蓝桥杯评测系统是根据通过样例数来评分,所以我们做题时一定要注意约定样例取值范围。
例题:K倍区间(暴力法只能通过部分样例,所以要用更好的算法)
int i=1;
int j=2;
int m=i+j;
int i=1;
while(i<n)
{
i=i*2;
}
for(int i=0;i<n;i++)
{
cout<<i<<endl;
)
for(int m=1;m<n;m++)
{
int i=1;
while(i<n)
{
i=i*2;
}
}
k为循环层数
做题时已经发现的不可能取到的数值,就不要再让计算机算了,尽量节省时间,蓝桥杯中目前遇到的还没有用到过过于繁琐的剪枝,大多也是在BFS和DFS中出现(bool vis)
例题:货物摆放
函数作用:查找该元素在数组中第一次出现的位置的地址(类似于0x的地址)
模型:find(查找起点,查找终点,查找目标元素)
同样,查找区间为[查找起点,查找终点)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[10]={2,6,8,1,3,7,5,1,0,11};
cout<<find(a+0,a+5,8)<<endl;//打印类似0x地址
cout<<find(a+0,a+5,8)-a<<endl;//打印数组【】内的序号
return 0;
}
PI=atan(1.0)*4
PI=3.14159265

| 类型 | 32位计算机 | 64位计算机 |
| char | 1 | 1 |
| short int | 2 | 2 |
| int | 4 | 4 |
| long int | 4 | 8 |
| long long int | 8 | 8 |
| char* | 4 | 8 |
| float | 4 | 4 |
| double | 8 | 8 |
| 类型 | 范围 | 估计值 |
| char | -128~+127 | |
| short | -32767~+32768 | 3*10^4 |
| unsigned short | 0~+65536 | 6*10^4 |
| int=long | -2147483648~+2147483647 | 2*10^9 |
| unsigned int | 0~+4294967295 | 4*10^9 |
| long long | -9223372036854775808~+9223372036854775807 | 9*10^18 |
这个比赛很少用指针,如果想要存储字符串,用指针也是一个不错的选择(直接可以用string类避免用指针)
//指针数组存储字符串列表
#include <stdio.h>
const int max = 5;
int main()
{
const char *names[] =
{ //定义指针数组,存储字符串列表
"Zhang San", //每个元素都是双引号括起来的
"Li Si",
"Wang Wu",
"Su Wukong",
"Tang Er",
};
int i=0;
for(i=0;i<max;i++)
{
printf("Value of names[%d] = %s\n",i,names[i]); // 注意 %s
}
return 0;
}
格中输入:

回车:


日期计算

在一个格中输入日期:

在另一个格中输入:
(第一个参数表示日期所在位置,第二个参数表示输出样式(会有提示))
回车:

题目描述
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
这题明显用代码写就过于复杂,还容易出错
首先用excel填充2000年1月1日到2020年10月1日(发现共有7580行)
然后设置单元格格式排成

这样的格式
这个时候我发现的问题是

感觉好像只是把外衣改了一下,但本质还是2000/1/1这个格式,导致替换出现问题(查找似乎还没有问题,这块不太懂,懂的佬麻烦给我指点一下)
这样的话我索性把AB列复制到word里(仅保留文字)
根据word复制过去的文字的格式查找



总共有1083个星期一
总共有250个1日
总共有34个星期一&&1日
所以有250+1083-34=1299天需要跑两公里
总共有7580天
所以有7580-1299=6281天需要跑一公里
所以共跑1299*2+6281*1=8879公里
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a=10;
cout<<oct<<10<<endl<<hex<<10<<endl<<dec<<10<<endl;
printf("%#o %#x %#d",a,a,a);//012 0xa 10
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x,n,a[100];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>hex>>x;
a[i]=x;
}
for(int i=0;i<n;i++)
{
cout<<setbase(8)<<a[i]<<endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
cout<<setw(25)<<256<<endl;//前面有25-3=22个空格
cout<<setfill('9')<<setw(10)<<256;//前面有7个9
}
用到队列(有时会用到优先队列)
主要思想:把所有符合条件的点都压入队列,然后挨个元素弹出上下左右前后搜索,直到队列清空时代表搜索完毕,搜索的时候注意判断是否已经搜索过,用bool vis【】判断。
例题1:全球变暖
例题2:跳马
用到递归(不好理解)
主要模板:可参见如下全排列例题
(1)确定 边界 if()return;
(2)进入for循环
(3)判断是否搜索过 if(vis[])vis[]=true; dfs(); vis[]=false;
DFS例题合集(不定时更新):
最大公约数
#include <bits/stdc++.h>
using namespace std;
int a,b;
int main()
{
scanf("%d%d",&a,&b);
for(int i=min(a,b);i>=1;i--)
{
if(a%i==0&&b%i==0)
{
printf("%d",i);
break;
}
}
return 0;
}
最小公倍数
#include <bits/stdc++.h>
using namespace std;
int a,b;
int main()
{
scanf("%d%d",&a,&b);
for(int i=1;i<=a*b;i++)
{
if(i%a==0&&i%b==0)
{
printf("%d",i);
break;
}
}
return 0;
}
最大公约数
#include <bits/stdc++.h>
using namespace std;
int main()
{
cout<<__gcd(25,5);
return 0;
}
最小公倍数
多写一个lcm函数
#include <bits/stdc++.h>
using namespace std;
int lcm(int a,int b)
{
return a*b/__gcd(a,b);
}
int main()
{
cout<<lcm(25,5);
return 0;
}
例题:无聊的逗
例题1:拿金币
例题2:包子凑数
思路:选取局部最优解,但是最大的缺陷就是在某些情况下不适用
举例:纸币问题
比如面额有1元,2元,5元,10元,20元,50元,100元,那么对于110元来说,可以用贪心从最大面额100元开始找。
但是如果改纸币面额,比如1元,2元,5元,20元,55元,100元,那么如果用到贪心算法,会发现并不能找出最优解(贪心:100+5+5=110 动态规划:55+55=110)
动态规划代码如下:
#include <bits/stdc++.h>
using namespace std;
int dp[10000];
int n;
int b[6]={1,5,20,50,55,100};
int temp;
int main()
{
dp[0]=0;
dp[1]=1;
dp[5]=1;
dp[20]=1;
dp[50]=1;
dp[55]=1;
dp[100]=1;
for(int i=1;i<=10000;i++)
{
temp=10000;
for(int k=0;k<6;k++)
{
if(i>=b[k])
{
temp=min(dp[i-b[k]]+1,temp);
}
}
dp[i]=temp;
}
for(int i=1;i<10000;i++)
{
cout<<i<<"元用"<<dp[i]<<"张"<<endl;
}
return 0;
}
大部分是二分法
求不了子数字,但能求子字符串
例题:超级质数
是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。
在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知。
使用递归解决问题,思路清晰,代码少。但是在主流高级语言中(如C语言、Pascal语言等)使用递归算法要耗用更多的栈空间,所以在堆栈尺寸受限制时(如嵌入式系统或者内核态编程),应避免采用。所有的递归算法都可以改写成与之等价的非递归算法。
递归的重点是找到递归表达式
例1:阶乘
#include <bits/stdc++.h>
using namespace std;
int f(int n)
{
if(n==1)
{
return 1;
}
return n*f(n-1);
}
int main()
{
cout<<f(10);
return 0;
}
例2:汉诺塔
例3:斐波那契数列
快速查找某区间内的最大值
找子串的最快方法
最长上升子序列+最长公共子序列
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U
这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实