目录

  • 承压计算【递推】
  • 兴趣小组【文件操作】
  • Excel地址【进制转换】
  • 拉马车【模拟 双端队列】
  • 纸牌三角形【全排列】
  • 外星日历【取模】
  • 青蛙跳杯子【BFS】
  • 分巧克力【二分】
  • 购物单【模拟】
  • 日期问题【日期模拟问题】
  • k倍区间【前缀和 / 取模】
  • 迷宫【dfs】
  • 方格分割【dfs 有意思】
  • 油漆面积【扫描线】
  • 9数算式【全排列】

承压计算【递推】


分析: 你会发现每次往下都是除以2来平分,但是无论如何也不能是题目给的那么大呀。
这说明有单位换算,但是我们并不知道单位换算是咋换算的。但是可以知道的是,最后一层的最小数和最大数的比值在那种单位下都是不变的。故可以求出最后一行的最大数和最小数的比值,以此来求出最大值。

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
double a[105][105]=
{   {7},{5,8},{7,8,8},{9,2,7,2},{8,1,4,9,1},{8,1,8,8,4,1},{7,9,6,1,4,5,4},{5,6,5,5,6,9,5,6},{5,5,4,7,9,3,5,5,1},{7,5,7,9,7,4,7,3,3,1},{4,6,4,5,5,8,8,3,2,4,3},{1,1,3,3,1,6,6,5,5,4,4,2},{9,9,9,2,1,9,1,9,2,9,5,7,9},{4,3,3,7,7,9,3,6,1,3,8,8,3,7},{3,6,8,1,5,3,9,5,8,3,8,1,8,3,3},{8,3,2,3,3,5,5,8,5,4,2,8,6,7,6,9},{8,1,8,1,8,4,6,2,2,1,7,9,4,2,3,3,4},{2,8,4,2,2,9,9,2,8,3,4,9,6,3,9,4,6,9},{7,9,7,4,9,7,6,6,2,8,9,4,1,8,1,7,2,1,6},{9,2,8,6,4,2,7,9,5,4,1,2,5,1,7,3,9,8,3,3},{5,2,1,6,7,9,3,2,8,9,5,5,6,6,6,2,1,8,7,9,9},{6,7,1,8,8,7,5,3,6,5,4,7,3,4,6,7,8,1,3,2,7,4},{2,2,6,3,5,3,4,9,2,4,5,7,6,6,3,2,7,2,4,8,5,5,4},{7,4,4,5,8,3,3,8,1,8,6,3,2,1,6,2,6,4,6,3,8,2,9,6},{1,2,4,1,3,3,5,3,4,9,6,3,8,6,5,9,1,5,3,2,6,8,8,5,3},{2,2,7,9,3,3,2,8,6,9,8,4,4,9,5,8,2,6,3,4,8,4,9,3,8,8},{7,7,7,9,7,5,2,7,9,2,5,1,9,2,6,5,3,9,3,5,7,3,5,4,2,8,9},{7,7,6,6,8,7,5,5,8,2,4,7,7,4,7,2,6,9,2,1,8,2,9,8,5,7,3,6},{5,9,4,5,5,7,5,5,6,3,5,3,9,5,8,9,5,4,1,2,6,1,4,3,5,3,2,4,1}
};//29 共30
int main(void)
{for(int i=0;i<29;i++){for(int j=0;j<=i;j++) {a[i+1][j]+=a[i][j]/2;a[i+1][j+1]+=a[i][j]/2;}}double maxv=0,minv=1e9;for(int i=0;i<=29;i++){minv=min(minv,a[29][i]);maxv=max(maxv,a[29][i]);}long long int ans=2086458231/minv*maxv;printf("%lld\n",ans);return 0;
}

兴趣小组【文件操作】

#include<bits/stdc++.h>
using namespace std;
string s;
map<string,int>mp;
int main(void)
{/*freopen("1.txt","r",stdin);while(cin>>s) {mp[s]++;}fclose(stdin);cin.clear();//当多个文件流读入的时候freopen("2.txt","r",stdin);while(cin>>s) {mp[s]++;}fclose(stdin);cin.clear();freopen("3.txt","r",stdin);while(cin>>s) mp[s]--;int cnt=0;for(auto i=mp.begin();i!=mp.end();i++) if(i->second==2) cnt++;cout<<cnt;fclose(stdin);*/cout<<20;return 0;
}

Excel地址【进制转换】

#include<bits/stdc++.h>
using namespace std;
char get(int x){return 'A'+(x-1+26)%26;}
int n;
int main(void)
{while(cin>>n) {string s;while(n){int t=n%26;s=get(t)+s;n=(n-1)/26;}cout<<s<<endl;}return 0;
}

拉马车【模拟 双端队列】

#include<bits/stdc++.h>
using namespace std;
string a,b;
int main(void)
{while(cin>>a>>b){deque<char>q1,q2,q3;for(int i=0;i<a.size();i++) q1.push_back(a[i]);for(int i=0;i<b.size();i++) q2.push_back(b[i]);int flag=0,cnt=0;map<char,int>mp;while(cnt<=1000000){if(!q1.size()||!q2.size()) break;if(!flag){if(!q1.size()) break;char c=q1.front(); q1.pop_front();if(mp[c]) {q1.push_back(c);while(q3.back()!=c) {q1.push_back(q3.back());mp[q3.back()]--;q3.pop_back();}q1.push_back(q3.back());mp[q3.back()]--;q3.pop_back();if(!q2.size()) break;}else mp[c]++,flag=1,q3.push_back(c);}else{if(!q2.size()) break;char c=q2.front(); q2.pop_front();if(mp[c]) {q2.push_back(c);while(q3.back()!=c) {q2.push_back(q3.back());mp[q3.back()]--;q3.pop_back();}q2.push_back(q3.back());mp[q3.back()]--;q3.pop_back();if(!q1.size()) break;}else mp[c]++,flag=0,q3.push_back(c);}cnt++;}if(q1.size()&&q2.size()) cout<<-1;else {while(q1.size()) cout<<q1.front(),q1.pop_front();while(q2.size()) cout<<q2.front(),q2.pop_front();}cout<<'\n';}return 0;
}

纸牌三角形【全排列】

#include<bits/stdc++.h>
using namespace std;
int a[15],cnt;
map<deque<int>,int>mp;
int main(void)
{for(int i=0;i<9;i++) a[i]=i+1;do{int len1=a[0]+a[1]+a[2]+a[3];int len2=a[3]+a[4]+a[5]+a[6];int len3=a[0]+a[8]+a[7]+a[6];if(len1==len2&&len2==len3) cnt++;}while(next_permutation(a,a+9));cout<<cnt/6<<endl;return 0;
}

外星日历【取模】

#include<bits/stdc++.h>
using namespace std;
//A B C D E,F G H I
char a[10]={'I','A','B','C','D','E','F','G','H'};
int main(void)
{string s="651764141421415346185";int n=0;for(int i=0;i<s.size();i++) n+=s[i]-'0';int ans=n%9;cout<<a[ans]<<endl;return 0;
}

青蛙跳杯子【BFS】

#include<bits/stdc++.h>
using namespace std;
string a,b;
int dx[6]={-1,1,-2,2,-3,3};
int bfs()
{ int n=a.size();map<string,int>mp; queue<string>q; q.push(a); mp[a]=0;while(q.size()) {string s=q.front(); q.pop();if(s==b) return mp[s];int x=s.find('*');for(int i=0;i<6;i++){int tempx=x+dx[i];if(tempx<0||tempx>=n) continue;string temp=s;swap(temp[x],temp[tempx]);if(mp.count(temp)) continue;mp[temp]=mp[s]+1;q.push(temp);}}
}
int main(void)
{while(cin>>a>>b) cout<<bfs()<<'\n';return 0;
}

分巧克力【二分】

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5+10;
LL a[N],b[N],n,m;
bool check(int mid)
{LL cnt=0;for(int i=0;i<n;i++) cnt+=(a[i]/mid)*(b[i]/mid);return cnt>=m;
}
int main(void)
{cin>>n>>m;for(int i=0;i<n;i++) cin>>a[i]>>b[i];int l=0,r=1e9;while(l<r){int mid=l+r+1>>1;if(check(mid)) l=mid;else r=mid-1;}cout<<l;return 0;
}

购物单【模拟】


详细题解

5200

日期问题【日期模拟问题】

#include<bits/stdc++.h>
using namespace std;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int a,b,c;
bool judge(int x)
{if(x%400==0||(x%4==0&&x%100!=0)) return true;return false;
}
bool check(int s1,int s2,int s3)
{if( s1==a && s2==b && s3==c ) return true;return false;
}
int main(void)
{scanf("%d/%d/%d",&a,&b,&c);for(int i=19600101;i<=20591231;i++){int s1=i/10000;int s2=(i%10000)/ 100;int s3=i%100;if(judge(s1)) month[2]=29;if(s1>=1&&s2<=12&&s3>=1&&s3<=month[s2])if(check(s1%100,s2,s3) || check(s2,s3,s1%100) || check(s3,s2,s1%100)){printf("%04d-%02d-%02d\n",s1,s2,s3);}month[2]=28;}return 0;
}

k倍区间【前缀和 / 取模】

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long int LL;
LL a[N],s[N],st[N],n,k;
int main(void)
{cin>>n>>k;for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]+a[i];st[0]++;LL ans=0;for(int i=1;i<=n;i++){int t=s[i]%k;ans+=st[t];st[t]++;}cout<<ans;return 0;
}

迷宫【dfs】

#include<bits/stdc++.h>
using namespace std;
string s[10]=
{"UDDLUULRUL","UURLLLRRRU","RRUURLDLRD","RUDDDDUUUU","URUDLLRRUU","DURLRLDLRL","ULLURLLRDU","RDLULLRDDD", "UUDDUDUDLL","ULRDLUURRR"
};
int st[15][15],ans;
void dfs(int x,int y)
{if(x<0||x>9||y<0||y>9)//过界 {ans++;return;}if(st[x][y]) return;//是一个圈 st[x][y]=1;if(s[x][y]=='U') dfs(x-1,y);if(s[x][y]=='D') dfs(x+1,y);if(s[x][y]=='L') dfs(x,y-1);if(s[x][y]=='R') dfs(x,y+1);
}
int main(void)
{for(int i=0;i<10;i++)for(int j=0;j<10;j++){memset(st,0,sizeof st);dfs(i,j);}cout<<ans;return 0;
}

方格分割【dfs 有意思】

#include<cstdio>
#include<iostream>
using namespace std;
int n=6;
int ans;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int vis[7][7];
void dfs(int x,int y)
{if(x==0||x==6||y==0||y==6) //剪到边就剪完了{ans++;return;}for(int i=0;i<4;i++){int tempx=x+dx[i];int tempy=y+dy[i];if(!vis[tempx][tempy]){vis[tempx][tempy]=true;vis[n-tempx][n-tempy]=true;dfs(tempx,tempy); vis[tempx][tempy]=false;vis[n-tempx][n-tempy]=false;} }
}
int main(void)
{vis[n/2][n/2]=true;dfs(n/2,n/2);cout<<ans/4<<endl;return 0;
}

油漆面积【扫描线】


暴力做法。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=10010;
int n;
bool vis[N][N];
int ans,x1,x2,y1,y2;
int main(void)
{scanf("%d,",&n);for(int i=0;i<n;i++) {scanf("%d%d%d%d,",&x1,&y1,&x2,&y2);if(x1>x2) swap(x1,x2);if(y1>y2) swap(y1,y2);for(int i=x1;i<x2;i++){for(int j=y1;j<y2;j++){if(!vis[i][j]) ans++,vis[i][j]=true;}}}cout<<ans<<endl;return 0;
}

经典的扫描线题目

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
typedef long long int LL;
int n;
struct Segment
{int x,y1,y2;bool operator< (const Segment &t)const{return x<t.x;}int k;
}seg[N*2];
struct Node
{int l,r;int cnt;//当前区间被覆盖的次数int len;//子区间总共被覆盖的长度
}tr[N*8];
vector<int>ys;int find(int y)
{return lower_bound(ys.begin(),ys.end(),y)-ys.begin();
}void pushup(int u)
{if(tr[u].cnt) tr[u].len=ys[tr[u].r+1]-ys[tr[u].l];else if(tr[u].l!=tr[u].r){tr[u].len=tr[u*2].len+tr[u*2+1].len; }else tr[u].len=0;
}void build(int u,int l,int r)
{tr[u]={l,r,0,0};if(l!=r){int mid=(l+r)/2;build(u*2,l,mid),build(u*2+1,mid+1,r);}
}void modify(int u,int l,int r,int k)
{if(l<=tr[u].l&&tr[u].r<=r){tr[u].cnt+=k;pushup(u);}else{int mid=(tr[u].l+tr[u].r)/2;if(l<=mid) modify(u*2,l,r,k);if(r>mid) modify(u*2+1,l,r,k);pushup(u);}
}int main()
{cin>>n;for(int i=0,j=0;i<n;i++){int x1,y1,x2,y2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2);if(x1>x2) swap(x1,x2);if(y1>y2) swap(y1,y2);seg[j++]={x1,y1,y2,1};seg[j++]={x2,y1,y2,-1};ys.push_back(y1),ys.push_back(y2);}sort(ys.begin(),ys.end());ys.erase(unique(ys.begin(),ys.end()),ys.end());build(1,0,ys.size()-2);sort(seg,seg+n*2);int res=0;for(int i=0;i<n*2;i++){if(i>0) res+=tr[1].len*(seg[i].x-seg[i-1].x);modify(1,find(seg[i].y1),find(seg[i].y2)-1,seg[i].k);}printf("%d",res);
}

9数算式【全排列】

#include<bits/stdc++.h>
using namespace std;
int a[10],ans;
bool check(int l)
{int sum1=0,sum2=0;for(int i=1;i<=l;i++) sum1=sum1*10+a[i];for(int i=l+1;i<=9;i++) sum2=sum2*10+a[i];long long int sum=sum1*sum2;string s=to_string(sum);map<char,int>mp;for(int i=0;i<s.size();i++) mp[s[i]]++;if(s.size()==9&&mp.size()==9&&mp['0']==0){return true;}return false;
}
int main(void)
{for(int i=1;i<=9;i++) a[i]=i;do{for(int j=1;j<=8;j++) if(check(j)) ans++;}while(next_permutation(a+1,a+10));cout<<ans/2;//左右交换 return 0;
}

2017年蓝桥杯省赛相关推荐

  1. # 2017年蓝桥杯省赛cc++本科B组试题

    2017年蓝桥杯省赛c/c++本科B组试题 第一题:购物单 问题 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大 ...

  2. 2017第八届蓝桥杯省赛JAVA C组真题解析(带源码及解析)

    蓝桥杯历年真题及解析. 目录: 蓝桥杯历年真题及解析. A:外星日历(难度:★) 题目: 分析: 代码: B:兴趣小组(难度:★) 题目: 分析: 代码: C:纸牌三角形(难度:★★★) 题目: 分析 ...

  3. 2017第八届蓝桥杯省赛c/c++本科B组试题总结及解题答案

    尊重原创,转载请注明出处:http://blog.csdn.net/y1196645376/article/details/69718192(有改动在末尾)(改动的地方是用的更容易理解的方法) 第一题 ...

  4. 2017年蓝桥杯模拟赛

    1.标题:算年龄 英国数学家德摩根出生于19世纪初叶(即18xx年). 他年少时便很有才华.一次有人问他的年龄,他回答说: "到了x的平方那年,我刚好是x岁". 请你计算一下,德摩 ...

  5. 2017年蓝桥杯省赛 等差素数序列(暴力循环)

    题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可.2,3,5,7,11,13,....2,3,5,7,11,13,.... 是素数序列. 类似:7,37,67,97,1 ...

  6. 2017第八届蓝桥杯省赛-大学A组 包子凑数

    标题:包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为是无限笼. 每当有顾客想买X个包子,卖包子的大叔就会 ...

  7. 2017年蓝桥杯模拟赛-7礼物盒

     小y 有一个宽度为 100cm,高度为 20cm,深度为 1cm 的柜子,如下图. 小y 还有 363636 个礼物盒,他们的深度都为 1cm. 他们对应的宽度和高度如下,单位(cm). 1 1 ...

  8. 2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - C. 魔方状态

    2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - C. 魔方状态 魔方状态 二阶魔方就是只有2层的魔方,只由8个小块组成. 小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色, ...

  9. 记2017第八届蓝桥杯决赛(国赛)—北京三日游

    离蓝桥杯国赛结束也已经有很多天了,这段时间也一直没怎么做题,也好久没打开csdn了,今天又重新捡起来,所以来随意扯一下这次的北京三日游.......啊不,2017第八届蓝桥杯. 这已经是我第二次打蓝桥 ...

最新文章

  1. 销售抬头文本配置方法
  2. 消息消费要注意的细节
  3. 前端学习(2907):Vite的特点
  4. 去掉xsl运行的飞鸽传书办法
  5. android导航使用教程,android BottomNavigationView的简单使用教程
  6. JAVA变量直接可以相加不,Java学习第一天
  7. Web自动化测试:超详细的环境搭建步骤
  8. 时间片轮转(RR)调度算法(详解版)
  9. 精选的 Go 框架,库和软件的精选清单
  10. Python断言工具包assertP
  11. Exchange ProxyShell复现
  12. android7.1.2安装包,APK.1文件安装器下载-APK.1安装:微信APK安装器下载1.7 安卓版-西西软件下载...
  13. Ubuntu18.04安装灭霸SLAM:ORBSLAM3
  14. mac FileZilla下载与安装
  15. 《五》微信小程序中的 WXS(WeiXin Script)
  16. 云游戏的2022:破局、新生、元宇宙
  17. 【aabb 7744】
  18. 更新 | 待办事项,敏捷实践的核心工件
  19. Uniapp实现快递物流轨迹
  20. 2018福大软工实践第六次作业

热门文章

  1. Py之pipenv:Python包的管理利器pipenv简介、安装、使用方法详细攻略
  2. OS_FLAG.C(2)
  3. Codeforces Round #260 (Div. 1) A - Boredom DP
  4. jquery.cookies使用
  5. Win8怎么查看IP地址
  6. Mathematica数据处理(11)--标签
  7. sql 获取本周周一和周日
  8. Spark 1.4连接mysql诡异的问题及解决
  9. 经典小游戏--推箱子
  10. CentOS7关闭防火墙和SELinux