Codeforces Round #174 (Div. 2)

A題 寫麻煩了 直接乘 p-1次就可以 我還用快速冪 把1--p-1都求了出來 邊求邊取模

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<cmath>
using namespace std;
int result(int a,int b,int m)
{
    int d,t;
    d=1;
    t=a;
    while (b>0)
    {
        if (b%2==1)
            d=(d*t)%m;
        b/=2;
        t=(t*t)%m;
    }
    return d;
}
int main()
{
    int i,j,k,n,m,sum=0,flag = 1,s,g;
    cin>>n;
    for(i = 1; i < n ; i++)
    {
        flag  =1;
        for(j = 1 ; j <= n-2 ; j++)
        {
            s = result(i,j,n);
            if((s-1)%n==0)
            {
                flag = 0;
                break;
            }
        }
        if(!flag)
        continue;
        s = result(i,n-1,n);
        if((s-1)%n!=0)
        {
            flag = 0;
            continue;
        }
        sum++;
    }
    cout<<sum<<endl;

    return 0;
}


 

B題

#include<cstdio>
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
char str[1000010];
int main()
{
    int i,j=0,k,n,a=0,f=0;
    char c;
    cin>>n;
    getchar();
    for(i = 1; i <= n ; i++)
    {
        scanf("%c",&c);
        if(c=='A')
            a++;
        else if(c=='F')
            f++;
        else
            if(c=='I')
                j++;
    }
    if(j==1)
        cout<<"1"<<endl;
    else
        if(j==0)
        {
            cout<<a<<endl;
        }
        else
            cout<<"0\n";

    return 0;
}


 

C題 寫掛了剛開始寫了一半線段樹 看到好多人過 覺得沒那麼難 就隨便寫了個 當時過了 之後 WA了  聽隊長說了簡單方法

用一數組不斷更新尾部應加的值 若刪掉這個數 就把這個數值加到它的前一個 注意刪掉之後 都更新爲0

#include <iostream>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
using namespace std;
long long sum[1000010],x[1000010];
int main()
{
    int i,j,k,n,m,a,b,c,g=1;
    x[g] = 0;
    long long s=0;
    cin>>n;
    while(n--)
    {
        cin>>a;
        if(a==1)
        {
            cin>>b>>c;
            sum[b] += c;
            s+=(b*c);
            printf("%.6lf\n",s*1.0/g);
        }
        else if(a==2)
        {
            cin>>b;
            g++;
            x[g] = b;
            s+=b;
            printf("%.6lf\n",s*1.0/g);
        }
        else
        {
            if(g>=2)
            {
                s-=(x[g]+sum[g]);
                sum[g-1]+=sum[g];
                sum[g] = 0;
                x[g] = 0;
                g--;
                printf("%.6lf\n",s*1.0/g);
            }
        }
    }
    return 0;
}


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章