请让本题永远沉睡于此(东方化改题+给的标程)

先吐槽一波题目

然后再吐槽一波题目

然后再吐槽一波题目……

打住!(

下面是原题↓

原题

题目描述

公元21118年,世界变成一片废土,人们只能在绝望中残喘度过余生。

人类文明毁于一旦——原因是古老的书已无人能懂,大量知识被抛弃。

于是世界的智者们集合在一起,打算恢复知识的力量。

他们首先要振兴的,就是数学。

因为你刚刚拿了UOI(Universal Olympiad in Informatics)的AU,并且深知古

代数学那套理论,所以你作为这场大会的权威,解答大众的问题。

你要做的是,给出一个分数,求出它对 p=1e9+7 取模后的值。

输入输出格式

输入格式

第一行两个整数 a, b,为你所要求的分数 a/b 。

特别的,当你(出于各种原因)无法求解的时候,请输出“No Solution!”(不含

引号)。

输出格式

该分数对 p 取模后的值。

然后是改题√

题目描述

公元23333年,幻想乡变成一片废土,妖怪们只能在绝望中残喘度过余生。

幻想乡文明毁于一旦——原因是古老的书已无人能懂,大量知识被抛弃。

于是幻想乡的贤者们集合在一起,打算恢复知识的力量。

她们首先要振兴的,就是数学。

因为八云蓝刚刚拿了UOI(Universal Olympiad in Informatics)的AU,并且深知古

代数学那套理论,所以紫作为这场大会的权威,要求蓝解答大众的问题。

蓝还要帮紫准备东方华灯宴,所以把一个问题交给了你。

你要做的是,给出一个分数,求出它对 p=1e9+7 取模后的值。

输入输出格式

输入格式

第一行两个整数 a, b,为你所要求的分数 a/b 。

特别的,当你(出于各种原因)无法求解的时候,请输出“No Solution!”(不含

引号)。

输出格式

该分数对 p 取模后的值。

是不是无力吐槽了(

下边是给的标程(md这题太难了)

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 typedef long long ll;
 6 const ll p=1e9+7;
 7 ll qpow(ll k,ll n){
 8     if(n==0)return 1;
 9     if(n==1)return k%p;
10     ll h=qpow(k,n/2)%p;
11     if(n%2==0)return h%p*h%p;
12     return h%p*h%p*k%p;
13 }
14 char a[2000002],b[2000002];
15 ll c[2000001],d[2000001];
16 ll g[2000001],h[2000001];
17 ll e1=0,e2=0;
18 int s1,s2;
19 bool w=1;
20 inline void init(){
21     scanf("%s%s",a,b);
22     if(a[0]=='-'){
23         s1=strlen(a)-2;
24         w=1-w;
25         for(int i=0;i<=s1;i++){
26             c[i]=a[i+1]-'0';
27         }
28     }else{
29         s1=strlen(a)-1;
30         for(int i=0;i<=s1;i++){
31             c[i]=a[i]-'0';
32         }
33     }
34     if(b[0]=='-'){
35         s2=strlen(b)-2;
36         w=1-w;
37         for(int i=0;i<=s2;i++){
38             d[i]=b[i+1]-'0';
39         }
40     }else{
41         s2=strlen(b)-1;
42         for(int i=0;i<=s2;i++){
43             d[i]=b[i]-'0';
44         }
45     }
46     return;
47 }
48 int main(){
49     freopen("sleep.in","r",stdin);freopen("sleep.out","w",stdout);
50     init();
51     if(s2==0&&d[0]==0){
52         printf("No Solution!
");
53         return 0;
54     }
55     if(s1==0&&c[0]==0){
56         printf("0
");
57         return 0;
58     }
59     while(e1==0&&e2==0){
60         int l1=-1,l2=-1;
61         for(int i=0;i<=s1;i++){
62             e1*=10;
63             e1+=c[i];
64             if(e1>=p){
65                 l1++;
66                 g[l1]=e1/p;
67                 e1%=p;
68             }else if(l1!=-1){
69                 l1++;
70                 g[l1]=0;
71             }
72         }
73         for(int i=0;i<=s2;i++){
74             e2*=10;
75             e2+=d[i];
76             if(e2>=p){
77                 l2++;
78                 h[l2]=e2/p;
79                 e2%=p;
80             }else if(l2!=-1){
81                 l2++;
82                 h[l2]=0;
83             }
84         }
85         s1=l1;s2=l2;
86         for(int i=0;i<=s1;i++)c[i]=g[i];
87         for(int i=0;i<=s2;i++)d[i]=h[i];
88     }
89     if(e2==0&&e1!=0){
90         printf("No Solution!
");
91         return 0;
92     }
93     ll ans=e1%p*qpow(e2,p-2)%p;
94     if(!w&&ans)putchar('-');
95     printf("%lld
",ans);
96     return 0;
97 }

我相信你们一定看不完,因为我就没看完

(溜

原文地址:https://www.cnblogs.com/aristocrat/p/8461842.html