当前位置:网站首页>Xiao Sha's arithmetic problem solving Report
Xiao Sha's arithmetic problem solving Report
2022-07-05 15:25:00 【wch(】
Xiao Sha's arithmetic problem solving report
label : Inverse element


source : Cattle from
Their thinking :
Start with an example ,
Give the formula 1+1+3 * 1+1 * 6 * 7;
We can divide the formula into 1,1,3 * 1,1 * 6 * 7, Four parts exist num 1~4 in
Set the pointer number to mark the group to which each number belongs , Remember that the sum at this time is ans;
When we Jiang's sixth digit 6 Change it to 7 when ,
First of all, from the ans Subtract from num[4], Ran Ling num[4] / 6 * 7, Re order ans += num[4] that will do
Then I found myself digging
Inverse element
The problem is that the subject data is too large and modular operation is carried out , The order of modulo and division cannot be changed
For example, we give the title mod Reduce to 5
Calculate according to the above method
num[4]=((16%5)7)%5=2
After change num[4]=2 / 6 * 7 % 5 =
2/6 In addition, the problems are exposed To prevent this, we use the inverse element
I am also a beginner of inverse yuan , Is not very good , Don't understand
I mainly refer to the following article
https://zhuanlan.zhihu.com/p/378728642
According to Fermat's theorem When a And b Coprime :
Apply it to the above example to find 6 The inverse element of is 216;
num[4]=2216%57%5=4;
num[4]=7*7%5=4;
That's right
We can make bold guesses 1e9+7 Prime number , Get by fast power a model b Inverse element
Code implementation :
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9+7;
const int N = 1e6+8;
char s[N];
ll num[N],pos[N],n,q,a[N];
ll ksm(ll a, ll b) {
ll ans = 1;
while(b){
if (b & 1) (ans *= a) %= mod;
(a *= a) %= mod;
b >>= 1;
}
return ans;
}
int main()
{
cin>>n>>q;
scanf("%s",s+1);
for(int i=1;i<=n;i++) cin>>a[i];
int cnt=1;
num[1]=a[1];
pos[1]=1;
for(int i=2;i<=n;i++){
if(s[i-1]=='*'){
pos[i]=cnt;
num[cnt]=num[cnt]*a[i]%mod;
}
else{
num[++cnt]=a[i];
pos[i]=cnt;
}
}
ll ans = 0,x=0,y=0;
for(int i=1;i<=cnt;i++) (ans+=num[i]) %= mod;
while(q--){
cin>>x>>y;
ans=(ans-num[pos[x]]+mod)%mod;
num[pos[x]]=num[pos[x]]*ksm(a[x],mod-2)%mod*y%mod;
ans=(ans+num[pos[x]])%mod;
a[x]=y;
cout<<ans<<endl;
}
}
边栏推荐
猜你喜欢

B站做短视频,学抖音死,学YouTube生?

Common PHP interview questions (1) (written PHP interview questions)

Redis' transaction mechanism

I spring and autumn blasting-2

Bugku easy_ nbt

Fr exercise topic --- comprehensive question

Photoshop plug-in action related concepts actionlist actiondescriptor actionlist action execution load call delete PS plug-in development

Machine learning notes - gray wolf optimization
![P6183 [USACO10MAR] The Rock Game S](/img/f4/d8c8763c27385d759d117b515fbf0f.png)
P6183 [USACO10MAR] The Rock Game S

Crud of MySQL
随机推荐
Want to ask the big guy, is there any synchronization from Tencent cloud Mysql to other places? Binlog saved by Tencent cloud MySQL on cos
qt creater断点调试程序详解
【jvm】运算指令
What are CSRF, XSS, SQL injection, DDoS attack and timing attack respectively and how to prevent them (PHP interview theory question)
Coding devsecops helps financial enterprises run out of digital acceleration
Can gbase 8A view the location of SQL statement history?
Jmeter性能测试:ServerAgent资源监控
Anaconda uses China University of science and technology source
I collect multiple Oracle tables at the same time. After collecting for a while, I will report that Oracle's OGA memory is exceeded. Have you encountered it?
keep-alive
Stm32+bh1750 photosensitive sensor obtains light intensity
DVWA range clearance tutorial
P1451 求细胞数量/1329:【例8.2】细胞
Stop B makes short videos, learns Tiktok to die, learns YouTube to live?
Easyocr character recognition
MySQL 巨坑:update 更新慎用影响行数做判断!!!
maxcompute有没有能查询 表当前存储容量的大小(kb) 的sql?
Bugku's eyes are not real
Bugku's Ah Da
Interpretation of Apache linkage parameters in computing middleware