zoukankan      html  css  js  c++  java
  • uoj#73 【WC2015】未来程序

    在 2047 年,第 64 届全国青少年信息学奥林匹克冬令营前夕,B君找到了 2015 年,第 32 届冬令营的题目来练习。

    他打开了第三题 “未来程序” 这道题目:

    • 本题是一道提交答案题,一共 10 个测试点。

      对于每个测试点,你会得到一段程序的源代码和这段程序的输入。你要运行这个程序,并保存这个程序的输出。

      遗憾的是这些程序都效率极其地下,无法在比赛的 5 个小时内得到输出。

    B君想了一下,决定用 2047 年的计算机来试着运行这个题目,他找到了 2015 年的编译器,并很快得到了结果……

    这时B君从梦中惊醒,发现自己居然在第 32 届冬令营赛场上。之前的一切只是南柯一梦,而自己正需要解决“未来程序”这道题目。

    然而B君已经记不清梦中的程序运行的结果了,他试图再次运行这些程序。但是他发现计算机性能比梦里的差多了,程序确实都无法在 55 小时内得到结果。

    他需要你的帮助,来得到那些梦中的结果。

    本题是一道提交答案题,一共有 10 个测试点。

    对于每个测试点,你会得到一段程序的源代码和这段程序的输入。你要运行这个程序,并保存这个程序的输出。

    遗憾的是这些程序效率都极其低下,无法在比赛的 5 小时内得到输出。

    你需要帮助B君得到这些程序的输出。

    输入格式

    本题一共有 10 个测试点,编号为 1~10。以下用 “*” 表示测试点编号。

    对于每个测试点有 4 个文件,分别是 program*.cpp 文件,program*.c 文件,program*.pas 文件,program*.in 文件。

    你需要用自己的方法,得到以 program*.in 作为输入,编译运行 program*.{cpp, c, pas} 的输出。

    你只需要在 3 种语言的代码中选择 1 种来解这道题目。这 3 种语言的代码在语意上是类似的,运行结果是相同的。

    输出格式

    对于给出的 10 个测试点,你需要将程序的输出分别保存在 program*.out 中。

    特别地,我们保证每个测试点一定会输出恰好 10 行。

    评分方法

    每个测试点单独评分。

    如果你的一个输出文件超过了 4KB,或某一行超过了 400 个字符,该测试点得 0 分。

    否则对于每行单独评分,如果该行与标准答案相同,可以得 1 分。

    如果你的输出不足 10 行,我们会在你的输出末尾添加空行补齐 10 行。

    如果你的输出超过 10 行,我们会取出你的前 10 行作为输出。

    样例

    请下载输入数据。样例输入见 example.{in,cpp,c,pas},样例输出见 example.ans。

    恶心提答题。。真的无语。

    program1:容易看出求a*b%p,要高精度,python即可。

    program1.out:
    11239440904485
    7551029211890
    20677492996370
    592966462292420
    69231182718627
    479525534330380
    544015996901435
    214227311823605
    73749675429767
    239498441843796

    program2:经过一次转移,a=a+2b+c,b=a+b,c=a,那么我们可以构造3*3的矩阵,直接矩阵快速幂即可。

     1 //It is made by wfj_2048~
     2 #include <algorithm>
     3 #include <iostream>
     4 #include <cstring>
     5 #include <cstdlib>
     6 #include <cstdio>
     7 #include <vector>
     8 #include <cmath>
     9 #include <queue>
    10 #include <stack>
    11 #include <map>
    12 #include <set>
    13 #define inf (1<<30)
    14 #define il inline
    15 #define RG register
    16 #define ll long long
    17 #define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
    18 
    19 using namespace std;
    20 
    21 struct data{ ll a[4][4]; }ans,c;
    22 
    23 ll n,p;
    24 
    25 il ll gi(){
    26     RG ll x=0,q=1; RG char ch=getchar(); while ((ch<'0' || ch>'9') && ch!='-') ch=getchar();
    27     if (ch=='-') q=-1,ch=getchar(); while (ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x;
    28 }
    29 
    30 il data mul(RG data a,RG data b,RG ll p){
    31     RG data c; memset(c.a,0,sizeof(c.a));
    32     for (RG ll i=1;i<=3;++i)
    33     for (RG ll j=1;j<=3;++j)
    34         for (RG ll k=1;k<=3;++k){
    35         c.a[i][j]+=a.a[i][k]*b.a[k][j]%p;
    36         c.a[i][j]%=p;
    37         }
    38     return c;
    39 }
    40 
    41 il data qpow(RG data a,RG ll b,RG ll p){
    42     RG data c=a; b--;
    43     while (b){
    44     if (b&1) c=mul(c,a,p);
    45     a=mul(a,a,p),b>>=1;
    46     }
    47     return c;
    48 }
    49 
    50 il void work(RG ll n,RG ll p){
    51     memset(ans.a,0,sizeof(ans.a)),memset(c.a,0,sizeof(c.a));
    52     ans.a[1][1]=1,c.a[1][1]=c.a[1][2]=c.a[1][3]=c.a[2][2]=c.a[3][1]=1,c.a[2][1]=2;
    53     RG data b=qpow(c,n,p); ans=mul(ans,b,p);
    54     printf("%lld
    ",(ans.a[1][1]-2*ans.a[1][2]+ans.a[1][3]+2*p)%p); return;
    55 }
    56 
    57 int main(){
    58     File("program2");
    59     for (RG int i=1;i<=10;++i){
    60     n=gi(),p=gi();
    61     work(n,p);
    62     }
    63     return 0;
    64 }
    65 
    66 program2.out:
    67 0
    68 1
    69 96
    70 64
    71 2503
    72 2523
    73 4452160
    74 557586868
    75 959316082
    76 1107500137

    program3:幂和公式,然而我只会前6个点,不过6分挺好的。。(我的程序求4次方是WA的,我也不知道为什么。。)

     1 //It is made by wfj_2048~
     2 #include <algorithm>
     3 #include <iostream>
     4 #include <cstring>
     5 #include <cstdlib>
     6 #include <cstdio>
     7 #include <vector>
     8 #include <cmath>
     9 #include <queue>
    10 #include <stack>
    11 #include <map>
    12 #include <set>
    13 #define inf (1<<30)
    14 #define il inline
    15 #define RG register
    16 #define ll unsigned long long
    17 #define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
    18 
    19 using namespace std;
    20 
    21 ll n,s0,s1,s2,s3,s4;
    22 
    23 il int gi(){
    24     RG int x=0,q=1; RG char ch=getchar(); while ((ch<'0' || ch>'9') && ch!='-') ch=getchar();
    25     if (ch=='-') q=-1,ch=getchar(); while (ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x;
    26 }
    27 
    28 il void work(){
    29     scanf("%llu",&n);
    30     s0=n+1;
    31     s1=(1+n)*n/2;
    32     s2=n*(n+1)*(2*n+1)/6;
    33     s3=n*(n+1)/2*n*(n+1)/2;
    34     s4=(6*n*n*n*n*n+15*n*n*n*n+10*n*n*n-n)/30;
    35     printf("%llu
    %llu
    %llu
    %llu
    %llu
    %llu
    %llu
    %llu
    %llu
    %llu
    ",s0,s0,s1,s1,s2,s2,s3,s3,s4,s4);
    36     return;
    37 }
    38 
    39 int main(){
    40     File("program3");
    41     work();
    42     return 0;
    43 }
    44 
    45 program3.out:
    46 1000000000000001
    47 1000000000000001
    48 2538972135152631808
    49 2538972135152631808
    50 2806098670314569728
    51 2806098670314569728
    52 6570342264898322432
    53 6570342264898322432
    54 10067259324320137216
    55 10067259324320137216

    program9:破译密码。。不会搞,只能根据提示xjb猜。。

    program9.out:
    1984
    123456
    chenlijie
    $_$
    we
    hold
    these
    truths
    to be
    selfevident

    其他的还没做,到时候再玩吧。。

  • 相关阅读:
    HTML 与 HTML 页面之间动态传值的问题
    maven 导入本地项目(JQuery中的绝杀 $("表单").serialize() 可以自动提交表格数据)+邮件发送+通用的Servlet写法
    linux服务器nginx的卸载
    http协议
    所谓的批量删除
    查看本机ssh公钥,生成公钥
    centos7 redis5编译安装
    linux没有ll等命令的解决办法
    Linux 安装python3.7.0
    CentOS7 安装mysql
  • 原文地址:https://www.cnblogs.com/wfj2048/p/6576164.html
Copyright © 2011-2022 走看看