Mod problem FZU - 2108 栈模拟

2人阅读 评论(0) 收藏 举报
分类:

题意:定义了一种数值表示方式,给出这种表示方式下的表示,求原数值,模拟。

由于重复的次数都是个位数,最多也就是重复10000次,所以可以模拟这个重复的过程

输出取模后的结果,那就每一步都取模就行了,重复之后会有一个和前面的值合并的问题

发现用栈更好实现这个过程

开始写的时候感觉码量会很大,动手写会发现其实还好

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<stack>
using namespace std;
long long ten[2005];
long long mo;
char ch[2005];
long long poww(long long a, long long x){
	long long s = 1;
	while(x){
		if(x & 1)
		s = s * a % mo;
		a = a * a % mo;
		x >>= 1;
	}
	return s;
}
int main(){
	int T;
	cin >> T;
	while(T--){
		scanf("%s", ch);
		int len = strlen(ch);
		cin >> mo;
		stack<pair<long long, long long> >ack;
		long long ans = 0, pre = 0;
		long long ln = 0;
		for(int i = 0; i < len; i++){
			if(ch[i] == '['){
				ack.push(make_pair(pre, ln));
				pre = 0;
				ln = 0;
			}
			else if(ch[i] == ']'){
				int x = ch[i + 1] - '0';
				long long temp = pre;
				long long xx = poww(10, ln);
				ln = ln * x;
				x--;
				while(x--){
					pre = (pre * xx + temp) % mo;
				}
				i++;
				pair<long long, long long> p = ack.top();
				ack.pop();
				pre = (pre + p.first * poww(10, ln)) % mo;
				ln = ln + p.second;
			}
			else{
				pre = (pre * 10 + ch[i] - '0') % mo;
				ln++;
			}
		}
		cout << pre << endl;
	}
	return 0;
}

查看评论

FZU 2108 Mod problem 数学与模拟

把括号与它后面的第一个数看成一个单元,相邻单元之间的结果可以叠加上去,单元的结果由子单元的叠加值在求幂得出.。 (a*b)%c=(a%c)*(b%c)%c ll Pow(ll n) { ll x=1...
  • vvv_557
  • vvv_557
  • 2017-03-21 14:22:34
  • 269

FZU2108:Mod problem(数学)

Problem Description Given one non-negative integer A and one positive integer B, it’s very easy f...
  • libin56842
  • libin56842
  • 2014-12-10 15:58:53
  • 1446

FZU 2108 MOD problem

该说是字符串题目呢还是数论题目呢。 这题因为有字符串嵌套,所以最好还是拿递归来写。在构思递归的时候考虑到了要传什么参数的问题,每个递归函数传两个参数,对应的字符串长度,以及这一段的值。一开始估计错了...
  • u011277193
  • u011277193
  • 2014-02-22 19:09:59
  • 395

acm fzu 2108 Mod problem

Accept: 17    Submit: 50 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description...
  • q775968375
  • q775968375
  • 2013-04-20 19:31:28
  • 1232

Mod problem FZU - 2108 (递归+快速幂)

Given one non-negative integer A and one positive integer B, it’s very easy for us to calculate A Mo...
  • SunMoonVocano
  • SunMoonVocano
  • 2018-04-13 21:23:23
  • 4

状压dp fzu2218 Simple String Problem

传送门:点击打开链接 题意:一个长为n(n 求两段子串A和B,A和B中间没有共用的字母类型,求len(A)*len(B)的最大值 思路:当时想到了3种方法,感觉各有优势,都来BB一下。 ...
  • qwb492859377
  • qwb492859377
  • 2015-12-28 12:48:03
  • 955

fzu 2278 YYS [第八届福建省大学生程序设计竞赛 Problem G] [概率]

第八届福建省大学生程序设计竞赛 Problem G YYS; Yinyangshi is a famous RPG game on mobile phones. Kim enjoys collec...
  • hnust_xx
  • hnust_xx
  • 2017-07-22 20:52:41
  • 388

FZU 2232 炉石传说(二分图最大匹配)

FZU 2232 炉石传说(二分图最大匹配)
  • Tc_To_Top
  • Tc_To_Top
  • 2016-06-02 14:25:48
  • 723

fzu2271 X

该补的题解:https://zxy160.github.io/
  • zxy160
  • zxy160
  • 2017-07-19 18:45:39
  • 79

FZU 2108

题意:给出一种数字的构造,问这个数字(很大)对另一个数字的模等于多少。。 思路:首先(a*b)%c = a%c*b%c,然后根据构造进行dfs,得出结果,需要用快速幂求10^k%m(网上好多网站的题...
  • u013307987
  • u013307987
  • 2015-06-09 20:24:05
  • 258
    个人资料
    持之以恒
    等级:
    访问量: 5万+
    积分: 2950
    排名: 1万+
    最新评论