蓝桥杯2020省b题解

1.门牌制作

答案:624

2.既约分数

答案:2481215

3.蛇形填数

//int main()
//{
//	int k[100][100],a=1,b=1,c=2;
//	for (int i = 1; i <= 40; i++)
//	{
//		int q, p;
//		if (a == 1)
//		{
//			q = i;
//			p = 1;
//			a = -1;
//		}
//		else
//		{
//			q = 1;
//			p = i;
//			a = 1;
//		}
//		for (;q >= 1 && p >= 1&&p<=i&&q<=i;)
//		{
//			if (q + p == i+1)
//			{
//				k[q][p] = b;
//				b++;
//			}
//			if (a==-1)
//			{
//				q--;
//				p++;
//			}
//			else
//			{
//				q++;
//				p--;
//			}
//		}
//	}
//	cout << k[20][20];
//}

4.七段码


int ve[7][7];
bool visit[7];
int ans=0;
set<set<int> > se;
void dfs(int x,set<int> s)
{
	if(!se.count(s))
	{
		se.insert(s);
//		set<int>::iterator it;
//		for(it=s.begin();it!=s.end();it++)
//		{
//			cout<<char('a'+*it)<<" ";
//		}
//		cout<<endl;
		ans++;
	}
	if(s.size()==7)
	return ;
	for(int j=0;j<7;j++)
	{
		if(visit[j]||!ve[x][j])
		continue;
		s.insert(j);
		visit[j]=1;
		dfs(j,s);
		visit[j]=0;
		s.erase(j);
	}
}
void add(int x,int y)
{
	ve[x][y]=1;
	ve[y][x]=1;
}
int main()
{
	add(0,1);
	add(0,5);
	add(1,6);
	add(1,2);
	add(2,6); 
	add(2,3);
	add(3,4);
	add(4,5);
	add(4,6);
	add(5,6);
	set<int> s;
	for(int i=0;i<=6;i++)
	{
		s.insert(i);
		visit[i]=1;
		dfs(i,s);
		visit[i]=0;
		s.erase(i);
	}
	cout<<ans<<endl;
}

5跑步锻炼

答案:8879

6回文日期

int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int date)
{
    int year = date / 10000;
    int month = date % 10000 / 100;
    int day = date % 100;
    if(!day || month < 0 || month > 12 ) return false;
    if(month != 2 && day >months[month]) return false;
    if(month == 2)
    {
        if((year%4==0&&year%100!=0)||(year%400==0))
        {
            if(day > 29) return false;
        }
        else 
        {
            if(day > 28) return false;
        }
    }
    return true;
}
bool check1(string s)  
{
    int len = s.size();
    for(int i = 0, j = len - 1; i < j ; i++,j--) 
    {
        if(s[i] != s[j]) return false;
    }
    return true;
}
bool check2(string s) 
{
    if(check1(s)) 
    {
       if(s[0]!=s[2] || s[1]!= s[3] || s[0] == s[1]) return false;
       return true;
    }
}
int main()
{
    int date,flag=0;
    cin>>date;
    for(int i = date + 1; ;i++)
    {
        if(check(i))
        {
            string s = to_string(i);
            if(check1(s)&&!flag) 
            {
                cout<<i<<endl;
                flag = 1; 
            }
            if(check2(s)) 
            {
                cout<<i<<endl;
                return 0;
            }
        }
    }
    return 0;
}

7字串排序

const int N=1e4+10;
int n,len=N,ma=0;
int f[N][30],line[N][30];
int m[30],sum[30];
char a[N];
int init()
{
    for(int i=1;i<=n;i++)
    {
        for(int k=25;k>=0;k--)
        {
           f[i][k]=f[i][k+1];
           for(int j=1;j<i;j++)
           {
               f[i][k]=max(f[j][k+1]+(i-j)*j,f[i][k]);
           }
           if(f[i][k]>=n)
           {
              len=i; break;
           }
        }
        if(len<N) break;
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    init();
    for(int i=1;i<=len;i++)
    {
        for(int c=0;c<26;c++)
        {
            m[c]++;
            bool flag=0;
            for(int k=25;k>=0;k--)
            {
                sum[k]=m[k]+sum[k+1]; 
            }
            f[i][26]=f[i-1][26]+sum[c+1];
            for(int now=i;now<=len;now++)
            {
                for(int k=25;k>=0;k--) 
                {
                    f[now][k]=f[now][k+1];
                    for(int j=i;j<now;j++)
                    {
                        if(k==25)
                        {
                             f[now][k]=f[now-1][k]; break;
                        }
                        f[now][k]=max(f[now][k],f[j][k+1]+(now-j)*(j-i+sum[k+1]));
                    }
                    if(f[now][k]>=n)
                    {
                        flag=1;break;
                    }
                }
                if(flag) break;
            }
            if(flag) 
            {
                a[i]='a'+c; break;
            }
            m[c]--;
        }
    }
    for(int i=1;i<=len;i++) cout<<a[i];
}

8成绩统计

int n,sum1,sum2;
int a[10010];

int main()
{
  cin>>n;
  for(int i=0;i<n;i++)
  {
    cin>>a[i];
    if(a[i]>=60) sum1++;
    if(a[i]>=85) sum2++;
  }

  printf("%d%%\n",(int)(sum1*100.0/n+0.5));
  printf("%d%%\n",(int)(sum2*100.0/n+0.5));

  return 0;
}

9子串分值和

//const int N = 1e5 + 5;
//char p[N]; int f[N],ans, pos[26];
//int main()
//{
//	scanf("%s", p + 1);
//	for (int e = 1; p[e] != NULL; e++)
//	{
//		int t = p[e] - 'a';
//		f[e] = f[e - 1] + e - pos[t];;
//		pos[t] = e;;
//		ans += f[e];
//	}
//	printf("%d", ans);
//}

10平面切分

typedef pair<double, double> pdd;
set<pdd> lines;
int res = 1; 

int cmp(double c, double d) {
    set<pdd> points;
    pdd it;
    for (auto i = lines.begin(); i != lines.end(); i++) {
        double a = i->first, b = i->second;
        if (a != c) {
            it.first = (d - b) / (a - c);
            it.second = c * it.first + d; 
            points.insert(it);
        }
    }
    return points.size();
}

int main() {
    int n;
    cin >> n;

    while (n--) {
        double a, b;
        cin >> a >> b;
        int count1 = lines.size();
        lines.insert({ a,b });
        if (lines.size() != count1) {
            res++;
            res += cmp(a, b);
        }
    }

    cout << res << endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
蓝桥杯是一个国内著名的计算机比赛,为了帮助参赛者更好地准备和了解比赛的题型,组委会会公布历年的真题并提供相应的题解。 首先,我们需要了解蓝桥杯是一个综合性的计算机比赛,测试的对象包括计算机基础知识、编程能力以及解决实际问题的能力。 在历年的真题中,参赛者将面临不同类型的题目,包括算法设计与优化问题、数据结构与算法问题、编程题等。其中针对Python B组的题目主要考察的是对Python语言的掌握和应用能力。 题目解答一般会包含以下几个方面的内容: 1. 题目分析与理解:读取题目,理解题目的要求和限制条件。通过仔细分析题目,确定题目的输入与输出,以及问题的核心。 2. 设计解决方案:根据题目要求和限制条件,设计一个合适的解决方案。可以使用合适的算法和数据结构来解决问题,并做出相应的性能优化。 3. 编写代码实现:根据设计的方案编写相应的代码实现。需要注意的是,Python语言有其独特的语法和特性,掌握好这些特性可以更好地完成编程任务。 4. 调试与测试:编写完代码后,需要进行调试和测试。通过运行样例输入和输出,检查代码是否符合题目要求,并且没有逻辑上的错误。 5. 总结与优化:在完成题目解答后,可以进行总结和优化。包括分析算法复杂度、代码风格和可读性等方面,以便在比赛中更好地表现。 在准备蓝桥杯时,可以通过阅读历年的真题和题解来了解比赛的难度和类型,针对性地进行练习和提高。同时也可以参加相关的培训班和讨论活动,与其他参赛者交流经验和技巧。 总而言之,历年蓝桥杯真题的解答对于提高自己的编程能力和应对比赛非常有帮助。通过认真分析和实践,可以更好地理解并掌握Python编程,并在比赛中取得更好的成绩。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值