c++
- 进制
类型 | 英文缩写 |
---|---|
八进制 | oct |
十进制 | dec |
十六进制 | hex |
2.布尔方式输出
cout<<boolalpha<<x<<endl
输入:1
输出:ture
3.namespace
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 100+10;
int A[maxn];
int main(){
long long a,b;
while(cin>>a>>b){
cout<<min(a,b)<<"\n"
}
return 0;
}
- iostream提供了输入输出流;
- algorithm提供了一些常用的算法;
- using namespace std表示命名空间,这样就可以用cin代替std::cin,cout代替std::cout,min代替std::min了。
stl库
- 不定长数组:vector
vector是一个模板类,所以需要用vector< int >a或者vector< double >来声明一个vector。
方法 | 意义 |
---|---|
size( ) | 读取它的大小 |
resize( ) | 改变大小 |
push_back( ) | 向尾部添加元素 |
pop_back( ) | 删除最后一个元素 |
声明和初始化:
vector<int> a;
vector<int> a(10);
vector<int> a(10, 1);
vector<int> b(a);
vector<int> b(a.begin(), a.begin()+3);
vector<int> v = {1,2,3}
- 迭代器:iterator
迭代器相关:
名称 | 功能 |
---|---|
iterator begin(void) | 返回首迭代器 |
iterator end(void) | 返回尾后一个迭代器 |
reverse_iterator rbegin(void) | 返回反向首迭代器 |
reverse_iterator rend(void) | 返回反向尾后迭代器 |
gets函数的运用
-
这里gets函数会取出最后按下的换行符并丢弃。
-
这个函数只有一个参数。参数类型为 char* 型字符指针,也可以是一个一维数组首地址。
-
这里可以直接输入空格,不会被截断。而scanf函数会因空格、回车而截断。
find函数的运用
- 通常来说,find函数用于寻找某个序列的在string中第一次出现的位置。
- 查找字符串a是否包含子串b,不是用strA.find(strB) > 0 而是 strA.find(strB) != string:npos
- 其中string:npos是个特殊值,说明查找没有匹配
- 错误:if(str.find(“abc”) )
注:找不到abc会返回-1,不为0为True。0为False - string a;find(a.begin(),a.end(),‘a’)这句话就是说,在a中找到第一个存在子串与’a’子串相等的字符串的首地址。返回指向该字符串首地址的迭代器(下一次迭代将会接着上一次的迭代,这样很容易做出一个计算字符串中某个字符的出现次数)。
链表
洛谷题
-
插火把!p1789
本质是个二维数组标记的题
需要注意的是边界问题,如果不判断边界就一直ac不了 -
回文质数p1217
之前做的时候最后一个测试点一直超时,随后进行了局部的优化,比如说:
把除法判断奇数全部改成位异或(因为位异或的速度和加减法一样,但乘法比加减法慢十倍,除法比乘法还慢,所以再这里考虑用位异或),
偶数全非质数,
这样就ac啦!
#include<stdio.h>
#include<math.h>
int weishu(int number){
if(number==11){
return 1;
}
int weishu=0;
while(number>0){
number/=10;
weishu++;
}
if(weishu%2==0){
return 0;
}else{
return 1;
}
}
int huiwen(int number){
int a[10],i=0,j;
while(number>0){
a[i]=number%10;
number/=10;
i++;
}
for(j=0;j<i;j++,i--){
if(a[i-1]!=a[j]){
return 0;
}
}
return 1;
}
int prime(int number){
if(number==1){
return 0;
}
if(number%2==0){
return 0;
}
for(int i=2;i<=sqrt(number);i++){
if(number%i==0){
return 0;
}
}
return 1;
}
int main(void){
int m,n;
scanf("%d %d",&m,&n);
for(;m<=n;m++){
if(m==9989900){
break;
}
if(m^2==1&&weishu(m)&&huiwen(m)&&prime(m)){
printf("%d\n",m);
}
}
return 0;
}
3.p1308
统计单词数
#include<stdio.h>
#include <iostream>
#include <string>
using namespace std;
int main(void){
string mubiao;
string juzi;
getline(cin,mubiao);
getline(cin,juzi);
for(int i=0;i<mubiao.length();i++){
if(mubiao[i]>='A'&&mubiao[i]<='Z'){
mubiao[i]=mubiao[i]+32;
}
}
for(int i=0;i<juzi.length();i++){
if(juzi[i]<='Z'&&juzi[i]>='A'){
juzi[i]=juzi[i]+32;
}
}//先全都转换为小写字母
mubiao=" "+mubiao+" ";
juzi=" "+juzi+" ";//前后各补一个空格,方便比较
if(juzi.find(mubiao)==string::npos){
cout<<-1<<endl;
}else{
int weizhi1=juzi.find(mubiao);
int weizhi=juzi.find(mubiao);
int sum=0;
while(weizhi!=string::npos){
sum++;
weizhi=juzi.find(mubiao,weizhi+1);
}
cout<<sum<<" "<<weizhi1<<endl;
}
return 0;
}
比赛感想
第一次acm比赛,很荣幸能到西安电子科技大学参加他们举办的新生赛。首先,收获了和小伙伴们参加比赛的友谊,其次,切身体会到了自己和其他学校大一新生的差距,最后,总结到了部分实战措施,希望能够运用到下次比赛中,再接再厉!冲冲冲!