A.[传智杯 #3 决赛] 序列
思路:数据范围较小,暴力即可做出,注意开long long
#include<bits/stdc++.h>
using namespace std;
void solve(){
long long n,m,a[1005],sum=0;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(a[i]*a[j]<=m){
sum++;
}
}
}
cout<<sum;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n=1;
//cin>>n;
while(n--){
solve();
}
}
B.[蓝桥杯 2022 省 B] 刷题统计
思路:用day标记星期几,大于7时重新赋值为1
#include<bits/stdc++.h>
using namespace std;
void solve(){
long long n,m,k,a[1005],sum=0,num=1,day=1;
cin>>n>>m>>k;
while(1){
if(day==6||day==7){
sum+=m;
}
else{
sum+=n;
}
if(sum>=k){
cout<<num;
return ;
}
num++;
day++;
if(day==8){
day=1;
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n=1;
//cin>>n;
while(n--){
solve();
}
return 0;
}
C.[蓝桥杯 2015 省 B] 移动距离
思路:行数为(楼号-1)/排号宽度,若在偶数行则是正方向排号,列数就是楼号%排号宽度,反之则是排号宽度-楼号%排号宽度+1,两者的行数和列数分别绝对值相减再相加即可
#include<bits/stdc++.h>
using namespace std;
void solve(){
long long n,m,k,sum=0,a1,a2,b1,b2;
cin>>k>>n>>m;
a1=(n-1)/k;
if(a1%2==0){
a2=n%k;
}
else{
a2=k-n%k+1;
}
b1=(m-1)/k;
if(b1%2==0){
b2=m%k;
}
else{
b2=k-m%k+1;
}
cout<<abs(abs(b2-a2)+abs(b1-a1))<<endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n=1;
//cin>>n;
while(n--){
solve();
}
return 0;
}
D.[蓝桥杯 2020 国 C] 天干地支
思路:模拟,打表
#include<bits/stdc++.h>
using namespace std;
void solve(){
long long n;
cin>>n;
int a=n%10,b=n%12;
if(a==1){
cout<<"xin";
}
else if(a==2){
cout<<"ren";
}
else if(a==3){
cout<<"gui";
}
else if(a==4){
cout<<"jia";
}
else if(a==5){
cout<<"yi";
}
else if(a==6){
cout<<"bing";
}
else if(a==7){
cout<<"ding";
}
else if(a==8){
cout<<"wu";
}
else if(a==9){
cout<<"ji";
}
else if(a==0){
cout<<"geng";
}
if(b==1){
cout<<"you";
}
else if(b==2){
cout<<"xu";
}
else if(b==3){
cout<<"hai";
}
else if(b==4){
cout<<"zi";
}
else if(b==5){
cout<<"chou";
}
else if(b==6){
cout<<"yin";
}
else if(b==7){
cout<<"mao";
}
else if(b==8){
cout<<"chen";
}
else if(b==9){
cout<<"si";
}
else if(b==10){
cout<<"wu";
}
else if(b==11){
cout<<"wei";
}
else if(b==0){
cout<<"shen";
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n=1;
//cin>>n;
while(n--){
solve();
}
return 0;
}
E.[蓝桥杯 2016 省 AB] 四平方和
思路:三重循环枚举前三个数,最后一个数用n-前三个数各自平方和赋值为p,再开个变量u=sqrt(p),因为sqrt函数默认向下取整,若u*u=p,则p存在为整数,输出即可
#include<bits/stdc++.h>
using namespace std;
void solve(){
long long n;
cin>>n;
for(int i=0;i*i<=n;i++){
for(int j=0;j*j<=n-i*i;j++){
for(int k=0;k*k<=n-i*i-j*j;k++){
long long p=n-i*i-j*j-k*k,u=sqrt(p);
if(u*u==p){
cout<<i<<' '<<j<<' '<<k<<' '<<u;
return;
}
}
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n=1;
//cin>>n;
while(n--){
solve();
}
return 0;
}
F.[蓝桥杯 2019 国 C] 最长子序列
思路:神奇的代码过了,......
#include<bits/stdc++.h>
using namespace std;
void solve(){
string a,b;
int sum=0,j,num=0,q=0,w=0;
cin>>a>>b;
for(int i=0;i<b.size();i++){
for(j=w;j<a.size();j++){
if(b[i]==a[j]){
sum++;
q=1;
w=j+1;
break;
}
}
if(!q){
w=j;
}
else{
q=0;
w=j;
}
}
cout<<sum;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n=1;
//cin>>n;
while(n--){
solve();
}
return 0;
}
G.[蓝桥杯 2017 国 C] 合根植物
思路:简单的并查集,模板题
#include<bits/stdc++.h>
int n,m,k,a[1000005],sum=0;
using namespace std;
int find(int q){
if(a[q]!=q){
a[q]=find(a[q]);
}
return a[q];
}
void solve(){
cin>>n>>m>>k;
for(int i=1;i<=n*m;i++){
a[i]=i;
}
for(int i=1;i<=k;i++){
int b,c,d,f;
cin>>b>>c;
d=find(b);
f=find(c);
a[d]=f;
}
for(int i=1;i<=n*m;i++){
if(a[i]==i){
sum++;
}
}
cout<<sum;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n=1;
//cin>>n;
while(n--){
solve();
}
return 0;
}
H.[蓝桥杯 2023 国 B] 班级活动
思路:模拟几种情况我们发现,假设id出现次数为1的个数为num,id出现次数大于2的个数为qum,当num大于qum时,只需要将qum与num配对,剩下的num自己配对,操作次数为两者之和除2,当qum大于等于num时,操作次数为qum
#include<bits/stdc++.h>
int n,a[100005],num,qum;
using namespace std;
unordered_map<int,int>v;
void solve(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
v[a[i]]++;
}
for(int i=1;i<=v.size();i++){
if(v[i]!=2&&v[i]!=0){
if(v[i]==1){
num++;
v[i]=2;
}
else{
qum+=v[i]-2;
v[i]=2;
}
}
}
if(num>qum){
cout<<(num+qum)/2;
}
else{
cout<<qum;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n=1;
//cin>>n;
while(n--){
solve();
}
return 0;
}
I.[蓝桥杯 2013 国 C] 危险系数
思路:对于关键点z,我们可以标记并遍历每个点(等于站点时continue),dfs不经过这个点时能不能连通站点,若不可以,则该危险系数+1
#include<bits/stdc++.h>
int n,m,a,b,u,v,sum;
int vis[1005];
using namespace std;
vector<int>e[1005];
queue<int>w;
bool solve(int x,int g,int h){
if(!e[x].size()){
return false;
}
vis[g]=1;
w.push(g);
while(!w.empty()){
g=w.front();
for(int i=0;i<e[g].size();i++){
if(e[g][i]==x||vis[e[g][i]]){
continue;
}
w.push(e[g][i]);
vis[e[g][i]]=1;
if(e[g][i]==h){
while(!w.empty()){
w.pop();
};
return false;
}
}
w.pop();
}
return true;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>a>>b;
e[a].push_back(b);
e[b].push_back(a);
}
cin>>u>>v;
if(solve(0,u,v)){
cout<<"-1";
return 0;
}
for(int i=1;i<=n;i++){
if(i==u||i==v){
continue;
}
if(solve(i,u,v)){
sum++;
}
memset(vis,0,sizeof(vis));
}
cout<<sum;
return 0;
}
J.[蓝桥杯 2019 国 C] 数正方形
思路:组合数学,推出公式即可。题解
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 1e9+7;
int n,ans;
signed main()
{
cin>>n;
for(int i = 1;i<n;i++)
ans+=i*(n-i)*(n-i),ans%=mod;
cout<<ans;
return 0;
}
K.[蓝桥杯 2023 省 A] 更小的数
思路:位数相同时,从最高位看起,相同数位上的数大的数大
#include<bits/stdc++.h>
using namespace std;
string s;
int lens,ans;
bool pd(int l,int r)
{
for(int i = l,j = r;i <= j;i++,j--)
{
if(s[i] > s[j]) return true;
else if(s[j] > s[i]) return false;
}
return false;
}
int main()
{
cin >> s;
lens = s.length();
for(int i = 0;i < lens;i++)
{
for(int j = i+1;j < lens;j++)
{
if(pd(i,j)) ans++;
}
}
cout << ans;
return 0;
}