2013 Multi-University Training Conteest 10


1001 Answers
超簡単な問題ですが、Ciは2より多くないという意味が分かりませんでした.Ciの中には1があるだけで、MiはあまりSBではなくマイナスであればいいのです.もし1がないなら、奇偶を判定すればいいです.
#include
#include
#include
#include
#include
#include
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i'9');
    ret=c-'0';
    while((c=getchar())>='0'&&c<='9')
    {
        ret=ret*10+(c-'0');
    }
}
inline void OT(int a)
{
    if(a>=10)
    {
        OT(a/10);
    }
    putchar(a%10+'0');
}
int t[100001],c[100001];
int main()
{
    int n,q,m,i;
    bool flag;
    while(scanf("%d%d",&n,&q)!=EOF)
    {
        flag=false;
        For(0,n,i)
        {
            RD(t[i]);
        }
        For(0,n,i)
        {
            RD(c[i]);
            if(c[i]==1)
            {
                flag=true;
            }
        }
        while(q--)
        {
            scanf("%d",&m);
            if(m<=0)
            {
                printf("NO
"); } else if(flag==true) { printf("YES
"); } else if(m%2==1) { printf("NO
"); } else if(m%2==0) { printf("YES
"); } } } return 0; }
1004 エディター
来てみたらこの問題です.スピリットと言ってK神は彼に任せました.結局最後まで出てきませんでした.、ソロを見て血を吐くのです.一つのスタックができたら、必ずそうしますか?
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i'9');
    ret=c-'0';
    while((c=getchar())>='0'&&c<='9')
    {
        ret=ret*10+(c-'0');
    }
}
inline void OT(int a)
{
    if(a>=10)
    {
        OT(a/10);
    }
    putchar(a%10+'0');
}
stack q1,q2;
int a[1000001],sum;
void init()//   ,   
{
    while(!q1.empty())
    {
        q1.pop();
    }
    while(!q2.empty())
    {
        q2.pop();
    }
}
void Add(int k)//    
{
    q1.push(k);
    sum+=k;
    int m=q1.size();
    a[m]=max(a[m-1],sum);
}
bool Delete(int &k)//    
{
    if(q1.empty())
    {
        return false;
    }
    k=q1.top();
    q1.pop();
    sum-=k;
    return true;
}
int main()
{
    int n,i,j,k;
    char str[2];
    a[0]=-100000000000;
    while(scanf("%d",&n)!=EOF)
    {
        init();
        sum=0;
        while(n--)
        {
            scanf("%s",str);
            if(str[0]=='I')
            {
                scanf("%d",&k);
                Add(k);
            }
            else if(str[0]=='D')
            {
                Delete(k);
            }
            else if(str[0]=='L')
            {
                if(Delete(k))
                {
                    q2.push(k);
                }
            }
            else if(str[0]=='R')//               
            {
                if(q2.empty())
                {
                    continue;
                }
                k=q2.top();
                q2.pop();
                Add(k);
            }
            else if(str[0]=='Q')//              
            {
                scanf("%d",&k);
                printf("%d
",a[k]); } } } return 0; }
1006 ゲーム
ゲームは、みんなが制限を持って取りますので、si+min(max(-sj、A+B-s 1-m(j)+1:j>i).これを知ればいいです.
#include
#include
#include
#include
#include
#include
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i'9');
    ret=c-'0';
    while((c=getchar())>='0'&&c<='9')
    {
        ret=ret*10+(c-'0');
    }
}
inline void OT(int a)
{
    if(a>=10)
    {
        OT(a/10);
    }
    putchar(a%10+'0');
}
int c[1000001];
long long s[1000001];
int main()
{
    int n,a,b,i;
    long long m,si,zero=0;
    while(scanf("%d%d%d",&n,&a,&b)!=EOF)
    {
        for(i=0; i=0; i--)
        {
            s[i]=s[i+1]+c[i];
        }
        m=c[n-1];

        si=min(zero,max(-s[n-1],-s[0]+a+b-m+1));
        for(i=n-2; i>=0; i--)
        {
            m=s[i]+si;
            si=min(si,max(-s[i],-s[0]+a+b-m+1));
        }
        if(a>=m)
        {
            printf("ALICE
"); } else { printf("BOB
"); } } return 0; }
1009 Sum
1本の公式問題フェマ小定理を使って解決します.難点はn=10^100000です.文字列入力処理で前処理を追加する必要があります.
#include
#include
#include
#include
#include
#include
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i'9');
    ret=c-'0';
    while((c=getchar())>='0'&&c<='9')
    {
        ret=ret*10+(c-'0');
    }
}
inline void OT(int a)
{
    if(a>=10)
    {
        OT(a/10);
    }
    putchar(a%10+'0');
}
char str[100001];
long long tmp[100001];
__int64 pw(__int64 x,__int64 y)//     
{
    __int64 res=1;
    x=x%N;
    while(y>0)
    {
        if(y%2==1)
        {
            res=(res*x)%N;
        }
        x=(x*x)%N;
        y/=2;
    }
    return res%N;
}
void f()
{
    int i;
    tmp[0]=2;
    for(i=1;i<100001;i++)
    {
        tmp[i]=pw(tmp[i-1],10);
    }
}
void g(int l)
{
    int i=l-1;
    while(i>=0&&str[i]=='0')
    {
        str[i]='9';
        i--;
    }
    str[i]-=1;
}
int main()
{
    f();
    int i,l;
    __int64 sum;
    while(scanf("%s",str)!=EOF)
    {
        l=strlen(str);
        g(l);
        sum=1;
        for(i=l-1;i>=0;i--)
        {
            sum=(sum*pw(tmp[l-i-1],str[i]-'0'))%N;//        
        }
        printf("%I64d
",sum); } return 0; }
これで10校以上が全部終わりました.先日用事があったため、最後のこの問題解決報告を直ちに出しませんでした.本シリーズの最上位は9月に終了します.
楽しそうに聞いています.噴き出してはいけません.