【总结】蓝桥杯省赛

🎉️🎉️🎉️提前祝各位同学蓝桥杯顺利。

说在前面

大二了,人生中第二次蓝桥杯也结~束~(结束了一半)了。

去年简简单单报名了PythonBPython B组,实力比较弱,也是简简单单混了一个国二,但居然学校的记录被我大一的时候给破了?? 今年报名的是C/C++C/C++,总觉得今年的题目要比去年简单上不少,可能是错觉吧。

遥想365365天前的我:最多会半个暴力,遇到的题目大部分都是看不懂的,什么图论、数据结构看都不想看。

现在的我:这题暴力,那题暴力,欸?这一题也可以暴力欸....。能拿一分是一份,超过1e9+8e8的题,直接强制结束,并输出1-1...

题目与解题分析

A. 握手问题

题意:

有50个人两两握手,(注意A->B与B->A算作同一次),最后只有7个人没有进行两两握手,请问一共握手了多少次?

方法一:暴力

我们将这50个人排成一排形成下面的一张图:

image

然后让第一个人与后面的所有人进行依次握手,一共要进行49次,第二个人与后面的所有人进行握手,一共要进行48次...直到最后7个人的时候就不握手了。

伪代码:

for i 1 -> (50-7):
    ans+=50-i

方法二:

一共有50人,如果每个人之间都进行一次握手,那一共要进行C(250)C\binom{2}{50}次,由于有7个人没有进行两两握手,那么就要少C(27)C\binom{2}{7}次,答案就为C(250)C(27)=1204C\binom{2}{50}-C\binom{2}{7}=1204

B小球反弹

数学题,跳过,~5分不要也罢~不会,但还是要随便写一个交上去.

C好~数~简单

题意:如果一个数的的奇数位(个位,百位...)为奇数,偶数位(十位,千位...)为偶数,那么这个数为偶数.

n<=1e7

虽然这个题目一眼望过去像是有规律一样,但是由于n很小可以直接暴力.

#include<bits/stdc++.h>
using namespace std;
int n;
int ans;
int solve(int x)
{
  int now=1;
  while( x )
  {
    if( (x%10)%2!=now ) return 0;
    now^=1;
    x/=10;
  }
  return 1;


}
int main(){
  cin>>n;
  for(int i=1;i<=n;i++)
  {
    if( solve(i) ) ans++;
  }
  cout<<ans;
}

代码中now表示现在是奇数位还是偶数位.

R格式

给你一个n,和一个小数a,要求计算出2na2^n*a.

查看数据限制,发现这题的数特别大,其中n最大为1000,其中210002^{1000}远远超了long long (2642^{64}). 这道题明显高精度.

正解之前:

如果你这道题不会高精度,但是你使用了double数据类型,那么在dotcpp C语言网能拿52分

image

但是你用了float,就只能拿28分

image

#include<bits/stdc++.h>
using namespace std;
priority_queue<int>s;
int n,x,q,p;
long long ans;
int main(){
  cin>>n>>p>>q;;
  while(n--)
  {
    cin>>x;
    s.push(x);
  }
  while( p )
  {
    s.push( sqrt(s.top()) );
    p--;
    s.pop();
  }
    while( q )
  {
    s.push( (s.top())/2 );
    q--;
    s.pop();
  }

  while( s.size() )
  {
    ans+=s.top();
    s.pop();
  }
  cout<<ans;
}