1.函数范围
long long int 10的19次
int 和long int为10的10次方
类型名称 取值范围
int -2^31~(2^31-1)
unsigned int 0~(2^32-1)
2^31=2,147,483,648 10^9数量级
2^32=4,294,967,296 10^9数量级
类型名称 取值范围
long long (_int64) -2^63~(2^63-1)
unsigned long long (unsigned_int64) 0~(2^64-1)
2^63=9,223,372,036,854,775,808 10^18数量级
2^64=18,446,744,073,709,551,616 10^19数量级
所以本题不用字符数组读入也是可以的
2.为十的九次方,乘以天数就可能超int 所以要定义为longlong int
股票买入卖出问题
- //找出最大差值,如何降循环
- //贪心算法?
- //假设在第i天卖出该股票,那么应该在1~i-1天中价格最低的时候买入
- #include<bits/stdc++.h>
- using namespace std;
- int main(){
- long long int n;
- int m;
- cin>>n>>m;
- int minn=0,mid;
- long long int maxx=-9223372036854775806;//longlong型的下限
- for(int i=1;i<=n;++i){//先找到前面的数的最小值,再比较和的最大值
- scanf("%d",&mid);
- if(i==1) minn=mid;
- else minn=min(minn,mid);
- maxx=max(maxx,(long long)(mid-minn));
- }
- printf("%lld\n",maxx*m);
- return 0;
- }
3,字段和问题 如何用前缀和方法优化循环重数
#include<bits/stdc++.h>
using namespace std;
int main(){
map<int,int> cnt;//前面是键的类型,后面是值,相当于是字典
cnt[0]++;//map中会按键从小到大的顺序排列,这里相当于键0的值加1,这样第一次出现0时ans才有得加
int n,mid,s=0;
cin>>n;
long long int ans=0;
for(int i=0;i<n;++i)
{
cin>>mid;
if(mid!=100) s+=-1;
else s+=1;
ans+=cnt[s];//这里cnt如果用常规数组,那根本不存在cnt[-1],所以肯定会输出一大堆未初始化的数的
cnt[s]++;
}
cout<<ans<<endl;
return 0;
}
4.球赛题:把a,b定义成int了,当然不能用switch解决好吧 ,另外注意goal等数组需在i循环里清零,否则第二组数据输入进来的时候就错了!