SLON
很简单的模拟题但数据比较毒瘤,于是考场上成功爆零。
就直接用栈来维护中缀表达式的计算,然后求出一次项系数和常数项之后上扩展欧几里得就可以了。但是它……
数据太大,用龙龙宝宝一分都拿不到。龙龙宝宝多可爱的啊,多狠心的人才会去卡龙龙宝宝啊。
但是好在不用写高精度,因为既然所有讨论都是在模 sscanf
是行不通的,调了好久,边调边骂人,cao。
#include<bits/stdc++.h>
//#define feyn
#define int long long
const int N=200010;
using namespace std;
inline void read(int &wh){
wh=0;int f=1;char w=getchar();
while(w<'0'||w>'9'){if(w=='-')f=-1;w=getchar();}
while(w<='9'&&w>='0'){wh=wh*10+w-'0';w=getchar();}
wh*=f;return;
}
int m,n,top;
char w[N];
struct node{int a,b;};
inline node operator +(node s1,node s2){
return (node){(s1.a+s2.a)%n,(s1.b+s2.b)%n};
}
inline node operator -(node s1,node s2){
return (node){(s1.a-s2.a)%n,(s1.b-s2.b)%n};
}
inline node operator *(node s1,node s2){
return (node){(s1.a*s2.b%n+s1.b*s2.a%n)%n,(s1.b*s2.b)%n};
}
node aaa[N];
int bbb[N],topa,topb;
inline void pusha(node ss){
aaa[++topa]=ss;
}
inline void pushb(int ss){
bbb[++topb]=ss;
}
inline bool check(int s1,int s2){//s1<=s2?
if(s2>=s1)return true;
if(s2==2&&s1==3)return true;
return false;
}
inline void work(int wh){
while(topb>0&&check(wh,bbb[topb])){
int op=bbb[topb];topb--;
node s1=aaa[topa];topa--;
node s2=aaa[topa];topa--;
if(op==2)pusha(s1+s2);
if(op==3)pusha(s2-s1);
if(op==4)pusha(s1*s2);
}
pushb(wh);return;
}
/*
int gcd;
inline node exgcd(int aa,int bb){
if(bb==0){gcd=aa;return (node){1,0};}
node an=exgcd(bb,aa%bb);
return (node){an.b,an.a-aa/bb*an.b};
}
*/
signed main(){
#ifdef feyn
freopen("in.txt","r",stdin);
#endif
scanf("%s",w+1);int len=strlen(w+1);read(m);read(n);
for(int i=1;i<=len;i++){
if(w[i]=='x'){pusha((node){1,0});continue;}
if(w[i]=='('){pushb(1);continue;}
if(w[i]=='+'){work(2);continue;}
if(w[i]=='-'){work(3);continue;}
if(w[i]=='*'){work(4);continue;}
if(w[i]==')'){
while(true){
int op=bbb[topb];topb--;
if(op==1)break;
node s1=aaa[topa];topa--;
node s2=aaa[topa];topa--;
if(op==2)pusha(s1+s2);
if(op==3)pusha(s2-s1);
if(op==4)pusha(s1*s2);
}
continue;
}
int data=0;
while(w[i]>='0'&&w[i]<='9'){
data=data*10+w[i]-'0';
data%=n;i++;
}
pusha((node){0,data});i--;
}
while(topb>0){
int op=bbb[topb];topb--;
node s1=aaa[topa];topa--;
node s2=aaa[topa];topa--;
if(op==2)pusha(s1+s2);
if(op==3)pusha(s2-s1);
if(op==4)pusha(s1*s2);
}
int aa=aaa[topa].a%n,bb=aaa[topa].b%n;
for(int i=0;i<n;i++){
if(((aa*i+bb)%n+n)%n==m%n){
printf("%lld\n",i);return 0;
}
}
return 0;
}
一如既往,万事胜意
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析