群賽59

來源:互聯網
上載者:User

開學以來好久沒做群賽啊....基本上做了就會發發自己做的題目,雖然很菜t t

1個水題 最後一題 

1個類比題 後來才發現,囧

1個數論,這次又通過這題數論學到好多。

K - Hit and Blow   迷迷糊糊寫了幾個比較,然後就過了t_t 

H - Peer Review  類比題  有problem 滿足3個條件:1.被一個人審批多次,2.被同組織審批,3.被審批次數不等於k

#include<stdio.h>#include<string.h>#define LMT 1005int blo[LMT],time[LMT],sear[LMT][LMT],no[LMT];char ins[LMT][13];int all,n,k;int search(char *name){    int i;    for(i=0;i<all;i++)    if(strcmp(name,ins[i])==0)    return i;    strcpy(ins[i],name);    all++;    return i;}int test(int x){    int j=0;    for(j=1;j<=sear[x][0];j++)    if(blo[sear[x][j]]==blo[x])      return 0;    if(time[x]!=k)return 0;    return 1;}int main(){    int i,j,ans;    char name[13];    while(scanf("%d%d",&k,&n)!=EOF)    {        if(k==0&&n==0)break;        memset(time,0,sizeof(time));        memset(sear,0,sizeof(sear));        memset(no,0,sizeof(no));        ans=all=0;        for(i=1;i<=n;i++)        {            int x;            scanf("%s",name);            blo[i]=search(name);            for(j=0;j<k;j++)            {               scanf("%d",&x);               time[x]++;               int t;               for( t=1;t<=sear[x][0];t++)               if(sear[x][t]==i&&0==no[x])               {                   ans++;                   time[x]=-1;                   no[x]=1;               }               if(t>sear[x][0])                   sear[x][++sear[x][0]]=i;            }        }        for(i=1;i<=n;i++)        if(0==test(i)&&0==no[i]) ans++;        if(0==ans)printf("NO PROBLEMS FOUND\n");        else printf("%d PROBLEMS FOUND\n",ans);    }    return 0;}

J - Remoteland  用不大於n的數組成(相乘)一個儘可能大的完全平方數,開始迷惑為什麼範例中的數開方後有小數,後來一想這是mod之後的,好吧

根據完全平方數的性質:所有素因子的個數必須是偶數,我們要可以利用所有積除以奇數個個數的積就是我們要的結果因為要取摸,所以不能直接除a=c/b

然後根據這個公式:

c%mod=(a%mod)*(b%mod);令A=a%mod; B=b%mod;C=c%mod;

則A=a%mod=(a*1)%mod=a%mod*1%mod=(a%mod)*(b^(mod-1))%mod --------因為(b^(mod-1))%mod=1,費馬小定理。

=(a*b)%mod*(b^(mod-2))%mod=(c%mod)*(b%mod)^(mod-2)%mod=C*B^(mod-2)


#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define LL long long#define N 10000000#define mod 1000000007bool flag[N+5];int cnt,prime[N/10];LL num[N+5];void Prime()//取素數{    memset(flag,false,sizeof(flag));    cnt=0;    for(int i=2;i<=N;i++)    {        if(flag[i])continue;        for(int j=2*i;j<=N;j+=i)flag[j]=true;        prime[cnt++]=i;    }}int getsum(int n,int p)               //這裡可以到得n!裡面有多少個素數因子p{    int ans=0;    while(n)    {        ans+=n/p;        n/=p;    }    return ans;}int pow(LL x,int n)               //快速冪相乘{    LL ans=1;    while(n)    {        if(n&1)ans=ans*x%mod;        x=x*x%mod;        n>>=1;    }    return ans;}int main(){    //freopen("a.txt","r",stdin);    num[0]=1;    for(int i=1;i<=N;i++)num[i]=num[i-1]*i%mod;               //求階乘    Prime();    int n;    while(scanf("%d",&n)&&n)    {        LL ret=1;        for(int i=0;i<cnt&&prime[i]<=n;i++)        {            int x=getsum(n,prime[i]);            if(x&1)ret=ret*prime[i]%mod;    //求出奇數個素數的乘積        }        int ans=num[n]*pow(ret,mod-2)%mod;               //這裡用到了費馬小定理,既x^(mod-1))%mod=1        printf("%d\n",ans);    }    return 0;}


C題也寫了下,直接二分果斷逾時了。

G題是單調隊列.又不會。

開始討厭管機房了,一整個下午泡在那裡整這整那的,累死我啊,自己一點事都沒做- -|||


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.