文章目录
空间(计算机基础知识)
题解
1MB=1024 KB=1024*1024 B
1B=8 bit
32位二进制整数,即32bit/8bit=4 B
答
案
:
256
∗
1024
∗
1024
/
4
{答案:256*1024*1024/4}
答案:256∗1024∗1024/4
AC
67108864
卡片(暴力)
题解
暴力
AC
3181
#include<bits/stdc++.h>
using namespace std;
int s[10];
bool check(int x){
while(x){
int k=x%10;x/=10;
if(s[k]<=0) return false;
s[k]--;
}
return true;
}
int main(){
for(int i=0;i<10;i++) s[i]=2021;
for(int i=1;;i++){
if(!check(i)){
cout<<i-1;
return 0;
}
}
return 0;
}
直线(浮点数精度问题+结构体排序)
题解
判断两个double是否相同:当double绝对值fabs(x,y)<=1e8时,则相等。
AC
40257
#include<bits/stdc++.h>
using namespace std;
struct hh{
double k,b;
}h[8000086];
bool cmp(hh x,hh y){
if(x.k==y.k) return x.b<y.b;
return x.k<y.k;
}
int main(){
int ret=0;
int n=20;
for(int x1=0;x1<n;x1++){
for(int y1=0;y1<n+1;y1++){
for(int x2=0;x2<n;x2++){
for(int y2=0;y2<n+1;y2++){
if(x1!=x2){
double k=double(y1-y2)/(x1-x2);
double b=y2-k*x2;
h[ret++]={k,b};
}
}
}
}
}
sort(h,h+ret,cmp);
long long ans=1;//加上最后一个没有被加上的数
for(int i=0;i<ret-1;i++){
//cout<<i<<" "<<h[i].k<<" "<<h[i].b<<endl;
if(fabs(h[i].k-h[i+1].k)<=1e-8&&fabs(h[i].b-h[i+1].b)<=1e-8) continue;
//cout<<i<<" "<<h[i].k<<" "<<h[i].b<<endl;
ans++;
}
cout<<ans+n;
return 0;
}
货物摆放
题解
可以直接暴力,但是时间复杂度非常高,也可以求出所有约数,然后再暴力。
AC
2430
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int mod=1e+17;
LL n;
int main(){
n=2021041820210418;
LL ans=0;
vector<LL> d;
for(LL i=1;i*i<=n;i++){
if(n%i==0){
d.push_back(i);
if(n/i!=i) d.push_back(n/i);
}
}
for(auto a:d)
for(auto b:d)
for(auto c:d)
if(a*b*c==n) ans++;
cout<<ans;
return 0;
}
一下题解来不及写了,蓝桥杯省赛完以后来补