Codeforces Round #118 (Div. 2)

A 题 :
    题意理解有误 ,贡献 1 WA 查找
    巨水一题: 两个不同的字符判断即可
B 题 :
    粗心写cmp 时 对 第二的排序 写成第一个了
    排序水题,sort 搞定
C题 :数学推断+幂取模
      规律: f[n]=2^n-1 + 2^n-1*2^n;
      在推导过程竟然忘了 多项式 可以用除的技巧,-->__<--

#include<stdio.h>
#define mod 1000000007
int Q_pow(__int64 n)
{
     if(n==0) return 1;
     if(n==1) return 2;
     __int64 sum=Q_pow(n/2);
     if(n%2) return (sum*sum*2)%mod;
     return (sum*sum)%mod;
}
int main()
{
    __int64 n;scanf("%I64d",&n);
    if(n==0) puts("1");
    else {
    __int64 sum=Q_pow(n-1);
    __int64 max=(sum+(sum*sum*2)%mod)%mod;
    printf("%I64d\n",max);
    }
    return 0;
}


D题 :
     S 和 A B C 四个数 求x^a*y^b*z^c 最大(x +y+z<=s)
    据说可以用三分搜索做,表示不会;
    但是 有听说了,有定理 首先感谢ACShiyu
    用拉格朗日函数可以证明,如下
    http://www.science-mathematics.com/Mathematics/201110/16848.htm

   
    #include<stdio.h>
    int main()
    {
        int s,a,b,c;
        scanf("%d%d%d%d",&s,&a,&b,&c);
        if(a==0&&b==0&&c==0) puts("0.0 0.0 0.0");
        else
        {
          double ans=1.0*s/(a+b+c);
          printf("%.12f %.12f %.12f\n",a*ans,b*ans,c*ans);
        }
     return 0;
    }
    


    E :没看 ,估计也不会

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值