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;
}


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值