牛客集训营第三题 G,严肃古板的秩序

2024-03-01 14:20

本文主要是介绍牛客集训营第三题 G,严肃古板的秩序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

分析题目:首先由#运算及阿拉伯数字的数量级,我们很容易想到快速幂的板子,所以直接拿过来就可(注意取模板子的位置)然后我们就可遍历整个字符串,细节处理将等号前面的阿拉伯数字依次压入一个容器中,等号后面的阿拉伯数字赋值给ans作为答案输出比较,具体代码实现及注释下面演示

代码演示:

 #include<bits/stdc++.h>
typedef long long ll;
typedef double db;
using namespace std;
ll ans;
vector<ll>v;
int b[202];  //存取所需要的具体符号,其中0代表+,1代表-,2代表# 
ll power(ll a,ll b,ll mod){   //去模快速幂板子 ll res=1;a %= mod; //过全部数据必须加上此代码,防止下方res*a越界 while(b){if(b&1) res=res*a%mod;b>>=1;a=a*a%mod;}return res;
}
int main(){string s;cin>>s;int i,temp=0,j;for(i=0;i<s.length();i++){if(s[i]=='?'||s[i]=='=') v.push_back(temp),temp=0;   //将等号前面的数字依次压入一个容器中 else temp*=10,temp+=s[i]-'0';  //将字符串每一位的字符转化为int类型,最后通过累乘10变为整数 }ans=temp;while(!b[v.size()]){   //所需数字的个数始终比所需符号个数多一 ll temp=v[0];for(j=1;j<v.size();j++){if(b[j]==0) temp=temp+v[j];if(b[j]==1) temp=temp-v[j];if(b[j]==2){if(temp<=0){   //题目保证底数为正整数,若不满足条件输出-1,跳出重新选取符号 temp=-1;break;}temp=power(temp,temp,v[j]);}}if(temp==ans){   //找到该循环所涉及的符号满足等于ans,输出结果 cout<<v[0];for(j=1;j<v.size();j++){if(b[j]==0) cout<<'+';if(b[j]==1) cout<<'-';if(b[j]==2) cout<<'#';cout<<v[j];}cout<<"="<<ans;break;}b[1]++;                //此代码的精髓,可以获取所有符号位关于012的组合,从00...遍历至222...最后一个组合遍历完之后使得b[v.size()]不为0结束符号循环 for(j=1;j<v.size();j++){b[j+1]+=b[j]/3;      b[j]%=3; //保证b[j]对3取模,结果之可能在0,1,2 }}if(b[v.size()]) cout<<-1;//所有组合遍历完都未找到结果等于ans,输出-1 
}

这篇关于牛客集训营第三题 G,严肃古板的秩序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/762738

相关文章

【牛客网 2017年校招模拟笔试(第一场)】超级素数幂

超级素数幂 描述 如果一个数字能表示为p^q(^表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q。 输入 输入一个正整数n(2 ≤ n ≤ 10^18) 分析 暴力枚举幂q,将n开q次方之后得到p,检查p是否为素数,并且检查p的q次幂是否等于n。 *要注意精度问题,代码待之后补充。

【牛客网 2017年校招模拟笔试(第一场)】 序列和

求序列和 描述 我们要找连续的一段长度大于等于L小于等于100整数和等于N,容易观察到合法的长度范围很小,于是我们从L开始枚举,然后找到第一个输出即可。 我的代码 最初提交了一次代码,用vector保存了所有满足条件的序列,输出长度最小的,提交之后说内存超出限制,看了一眼题目,发现内存貌似是限制在2w多k?伤心,之前做题没遇到过内存还有这么严格的限制。 修改了一下,其实这个代码并没

数独(搜索答案不唯一,牛客上测试83%)

#include <bits/stdc++.h>using namespace std;int a[10][10];int flag=0;bool check(int n,int key){//行判断for(int i=0; i<9; i++){int j=n/9;if(a[j][i]==key)return false;}//列判断for(int i=0; i<9; i++){int

小山菌_代码随想录算法训练营第三十天|122.买卖股票的最佳时机II、55. 跳跃游戏 、45.跳跃游戏II、1005.K次取反后最大化的数组和

122.买卖股票的最佳时机II 文档讲解:代码随想录.买卖股票的最佳时机II 视频讲解:贪心算法也能解决股票问题!LeetCode:122.买卖股票最佳时机II 状态:已完成 代码实现 class Solution {public:int maxProfit(vector<int>& prices) {int result = 0;for (int i = 1; i < prices

CVPR 2024第三弹:李飞飞教授惊喜亮相,CVPR之家乐队火爆演奏惊艳全场

CVPR 2024第三弹:小编与李飞飞教授惊喜同框,"CVPR之家"乐队火爆演奏惊艳全场! 会议之眼 快讯 2024 年&nbsp;CVPR&nbsp;(Computer Vision and Pattern Recogntion Conference) 即国际计算机视觉与模式识别会议,于6月17日至21日正在美国西雅图召开。CVPR是计算机视觉和模式识别领域的顶级会议之一。与ICCV和ECC

CVPR 2024第三弹:小编与李飞飞教授惊喜同框,CVPR之家乐队火爆演奏惊艳全场

CVPR 2024第三弹:小编与李飞飞教授惊喜同框,"CVPR之家"乐队火爆演奏惊艳全场! 会议之眼 快讯 2024 年&nbsp;CVPR&nbsp;(Computer Vision and Pattern Recogntion Conference) 即国际计算机视觉与模式识别会议,于6月17日至21日正在美国西雅图召开。CVPR是计算机视觉和模式识别领域的顶级会议之一。与ICCV和ECC

【C++进阶学习】第三弹——菱形继承和虚拟继承——菱形继承的二义性和数据冗余问题

继承(上):【C++进阶学习】第一弹——继承(上)——探索代码复用的乐趣-CSDN博客 继承(下):【C++进阶学习】第二弹——继承(下)——挖掘继承深处的奥秘-CSDN博客 前言: 在前面,我们已经讲过继承的相关知识,今天我们来将一个由继承拓展出来的很重要的知识,那就是——菱形继承和虚拟继承及相关知识讲解 目录 一、单继承和多继承 C++单继承 C++多继承 多继承的复

2024.06.20【读书笔记】丨生物信息学与功能基因组学(第十六章 真核生物基因组 第三部分)【AI测试版】

了解到您的需求,现在我将为您撰写关于《生物信息学与功能基因组学》的第三部分读书笔记。 《生物信息学与功能基因组学》第十六章读书笔记(第三部分) 正文(续) 真核基因组的重复性DNA序列 真核基因组中的重复性DNA序列是其结构的重要组成部分。这些序列可以根据重复单元的大小和分布模式被分类为卫星DNA、微卫星DNA和矿物DNA等。它们在染色体的结构稳定性、基因表达调控以及物种进化中扮演着重要角

文件重命名攻略:自定义不同类型文件名,一键去除编号,高效整理文件新秩序!

在信息爆炸的时代,我们的电脑里总是充斥着各式各样的文件,从工作文档到生活照片,从学习资料到娱乐视频,这些文件如同我们生活中的点滴记忆,承载着我们的喜怒哀乐。然而,随着文件的不断增多,如何高效、有序地管理它们,却成了许多人的难题。 首先,你需要进入文件批量改名高手的主页面,并在板块栏里选择“文件批量重命名”板块。在这里,你可以轻松实现文件的批量重命名操作,大大提高工作效率。 接下来,只需

牛客网-字节跳动真题-万万没想到之抓捕孔连顺

题目链接 地址 思路 已知:数据已排序双指针 i,ji指向刚接收数据,j指向距离i最远并且距离小于d的那个位置,此时形成区间[i,j]所以 相当于选择了最远那个并在在[i,j)中选出两个,此时C(2,i-j)具体看代码 代码 #include <iostream>#include <vector>using namespace std;// 求从n个中选出两个的组合数long l