蓝桥杯2021省赛刷题
by lqx
双阶乘
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int ans=1;
for(int i=1;i<=2021;i+=2){
ans*=i;
ans%=100000;
}
cout<<ans;
}
格点
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int cnt=0;
for(int i=1;i<=2021;i++)
for(int j=1;j<=2021;j++)
if(i*j<=2021)cnt++;
cout<<cnt;
}
3的倍数
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int a,b,c;cin>>a>>b>>c;
if((a+b)%3==0){cout<<"yes";return 0;}
if((b+c)%3==0){cout<<"yes";return 0;}
if((a+c)%3==0){cout<<"yes";return 0;}
cout<<"no";
}
卡片
#include <bits/stdc++.h>
using namespace std;
const int N=10;
int a[N];
int main(){
for(int i=0;i<=9;i++)a[i]=2021;
for(int i=1;;i++){
int t=i;
while(t){
a[t%10]--;
if(a[t%10]<0){
cout<<i-1;
return 0;
}
t/=10;
}
}
return 0;
}
砝码称重
#include <bits/stdc++.h>//dfs过50%
using namespace std;
#define int long long
const int N=1e5+9;
int n,a[N],vis[N],ans;
void dfs(int sum,int x){
if(x==n){
if(sum>0)vis[sum]=1;
return;
}
dfs(sum+a[x],x+1);
dfs(sum,x+1);
dfs(sum-a[x],x+1);
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
dfs(0,0);
for(int i=1;i<=N;i++)if(vis[i])ans++;
cout<<ans;
}
特殊年份
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int cnt=0;
for(int i=1;i<=5;i++){
int x;cin>>x;
int g=x%10;
int s=x/10%10;
int b=x/100%10;
int q=x/1000;
if(q==s&&(g-b==1))cnt++;
}
cout<<cnt;
}
小平方
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n;cin>>n;
int cnt=0;
for(int i=1;i<n;i++){
if((i*i)%n<n/2.0)cnt++;
}
cout<<cnt;
}
整数分解
#include <bits/stdc++.h>
int main(){
long long n = 2021;//插空法,从2020个空中选4个空插
printf("%lld",(n-1)*(n-2)*(n-3)*(n-4)/(4*3*2*1));
}
相乘
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int p=1e9+7;
signed main(){
for(int i=1;i<=p;i++){
if(i*2021%p==999999999){
cout<<i;
return 0;
}
}
cout<<0;
}
直线
#include <bits/stdc++.h>
using namespace std;
set<pair<double,double>> s;
int main(){
double k,b;
for(int x1=0;x1<20;x1++)
for(int y1=0;y1<21;y1++)
for(int x2=x1+1;x2<20;x2++)
for(int y2=0;y2<21;y2++){
k=(double)(y1-y2)/(x1-x2);
b=(double)(x1*y2-x2*y1)/(x1-x2);
s.insert({k,b});//s.insert({k,b});
}
cout<<s.size()+20;//+20条垂直的直线
}
时间显示
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n;cin>>n;
n/=1000;//ms转为s
int h=n/3600;
n-=h*3600;
int m=n/60;
n-=m*60;
h%=24;
printf("%02lld:%02lld:%02lld",h,m,n);
return 0;
}
货物摆放
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n=2021041820210418;
vector<int> v;//找到n的所有因子存储起来
for(int i=1;i*i<=n;i++){
if(n%i==0){
v.push_back(i);
if(i!=n/i)v.push_back(n/i);
}
}
//枚举三个位置
int ans=0;
for(int i=0;i<v.size();i++)
for(int j=0;j<v.size();j++)
for(int k=0;k<v.size();k++)
if(v[i]*v[j]*v[k]==n)ans++;
cout<<ans;
}