牛客集训营第三题 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

相关文章

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

牛客《剑指Offer》 -- 数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路 特别注意负数的情况,出现负数,将其转化为正数然后求倒数。 class Solution {public:double Power(double base, int exponent) {double total = 1;bool flag = false

牛客网《剑指Offer》 二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 负数用补码,其实就是求一个数据在计算机中是存储是怎么样子的。用位运算,就能很好实现。 class Solution {public:int NumberOf1(int n) {int count = 0;int flag = 1;while (flag != 0) {if ((n & f

牛客网《剑指Offer》 矩形覆盖

题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution {public:int rectCover(int number) {if(number==0) return 0;if(number==1) return 1;if(number==2) return 2;retu

牛客《剑指Offer》 变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 根据 普通的跳台阶可以总结出 f(n) = f(n-1) + f(n-2) +f(n-3) + 。。。。+ f(1) +1 不妨设 f(0) = 1 , 则易得 class Solution {public:int jumpFloorII(int n