2020牛客暑期多校训练营(第一场)

F Infinite String Comparision

  • 签到题,就是给你两个字符串,每个字符串可以以他本身为循环节循环无限次,让你以字典序规则判断两个字符串的大小。做法有不少,我就直接将字符串变为自己两倍,然后一次遍历判断每个位置对应的字符大小。

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <list>
#include <map>
#include <string>
#include <stack>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define S(X) scanf("%d",&(X))
#define SS(X, Y) scanf("%d%d",&(X),&(Y))
#define SSS(X,Y,Z) scanf("%d%d%d",&(X),&(Y),&(Z))
#define SL(X) scanf("%lld",&(X))
#define SLL(X, Y) scanf("%lld%lld",&(X),&(Y))
#define P(X) printf("%d\n",&(X))
#define P1 printf("-1\n")
using namespace std;
typedef double db;
typedef long long ll;
const int maxn=2e5+100;
using namespace std;
int main()
{
    #ifdef ONLINE_JUDGE
    #else
        freopen(".vscode/in.txt","r",stdin);
    #endif
    string s,ss;
    while(cin>>s>>ss)
    {
      s+=s;ss+=ss;
      int lens=s.length();
      int lenss=ss.length();
      int len=max(lens,lenss);
      bool flag=false;
      char ans;
      for(int i=0,s1=0,s2=0;i<=len+10;i++)
      {
          if(s[s1]<ss[s2]){
              ans='<';
              flag=true;break;
          }
          else if(s[s1]>ss[s2]){
              ans='>';
              flag=true;break;
          }
          s1++;s2++;
          if(s1==lens)s1=0;
          if(s2==lenss)s2=0;
      }
      if(flag)
        printf("%c\n",ans);
      else
        printf("=\n");
    }
    return 0;
}

J Easy Integration

  • 算出前几个例子的公式就能大致推出,如

\[1:1/(2*3)=1/6 \]
\[2: (1*2)/(3*4*5)=1/30 \]
\[3: (1*2*3)/(4*5*6*7)=1/140 \]
\[n: (1*2*3*...*n)*(1*2*3*...*n)/(1*2*3*...*n)*(1*2*3*...*2*n+1)=(n!)^2/(2*n+1)! \]

由于答案取模,所以可以用数组存入2*n+1的阶乘,算好分子分母后求出这个分数%mod的值,

由于直接模会超精度,因此用到逆元算\((a/b)\%p\),即利用\(b^{mod-2}\)来算出b的逆元,

那么结果就是

\[((n!)^2/(2n+1)!)\%mod --> ((a\%mod)*((b^{mod-2}\%mod))\%mod \]
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <list>
#include <map>
#include <string>
#include <stack>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
#include<limits.h>
#define S(X) scanf("%d",&(X))
#define SS(X, Y) scanf("%d%d",&(X),&(Y))
#define SSS(X,Y,Z) scanf("%d%d%d",&(X),&(Y),&(Z))
#define SL(X) scanf("%lld",&(X))
#define SLL(X, Y) scanf("%lld%lld",&(X),&(Y))
using namespace std;
typedef double db;
typedef long long ll;
const int mod = 998244353;
const int maxn=2e6+1000;
ll quick(ll a,ll b)//快速幂用来求b^(mod-2)即b的逆元
{
    ll ans=1;
    while(b>0)
    {
        if(b&1)
            ans=(ans*a)%mod;
        b>>=1;
        a=(a*a)%mod;
    }
    return ans;
}
ll F[maxn];
int main()
{
	#ifdef ONLINE_JUDGE
    #else
        freopen(".vscode/in.txt","r",stdin);
    #endif
    F[0]=1;
    for(int i=1;i<=2000100;i++)
        F[i]=(F[i-1]*i)%mod;//求阶乘
    //Ni[1]=1;
    // for(int i=2;i<=INT_MAX-2;i++)
    //     Ni[i]=(mod-mod/i)*Ni[mod%i]%mod;
    int n;
    while(~S(n))
    {
        ll fenz=(F[n]*F[n])%mod;//分子
        ll fenm=F[n<<1|1];//分母
        //cout<<fenz<<" "<<fenm<<" "<<Ni[fenm]<<endl;
        ll cnt=(fenz*(quick(fenm,mod-2)%mod))%mod;//答案的值了:((n!)^2/(2*n+1)!)%mod
        printf("%lld\n",cnt);
    }
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值