USACO 1.1項(簡易シミュレーション)

あなたのライドでのあなたのUFOは、ここで彼は...

問題の意味は次の2つの長さの文字列が6のみ大文字を含ん越えない与えられたが、2つの文字列がmod47の積に等しく決定される(Aは1、Bは、2 ...、Z 26)。

直接問題の意味に従って行にすることができません。

#include<bits/stdc++.h>
using namespace std;
char a1[10],b1[10];
int a[101],b[101];
int main(){
    gets(a1);gets(b1);
    int la=strlen(a1);
    int lb=strlen(b1);
    for(int i=0;i<la;i++)a[i+1]=a1[i]-64;
    for(int i=0;i<lb;i++)b[i+1]=b1[i]-64;
    int tota=1,totb=1;
    for(int i=1;i<=la;i++)tota*=a[i];
    for(int i=1;i<=lb;i++)totb*=b[i];
    if(tota%47==totb%47) cout<<"GO";
    else cout<<"STAY";
    return 0;
}

貪欲贈り主貪欲ギフト介護者

質問の意味:(NPのA)のグループについてGYは、誰もがそれよりもはるかに多くを受け取るためにお金を送ることを確認し、友人に互いに贈り物を送ります。この問題では、誰もが贈り物を与えるためにいくつかのお金を得たが、お金は彼の贈り物を受け取る人たちの間で均等に分割されます。しかし、友人の任意のグループで、一部の人々がより多くのプレゼントをお送りします(彼らは友人の多くを持っているからでしょう)、何人かの人々は、より多くのお金を用意しました。友人のグループを考えると、誰の名前14文字より長い、一人一人が、贈り物に費やすお金が与えられます、そして人々の彼のギフトのリストを受け取ります、誰もが受け取ったよりも多くのお金を送ってください番号。

シミュレーションを行う直接問題の意味に従って、あなたは、対応する名前と番号を補うためにマップすることができます。

//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
inline int read(){
    int x=0,o=1;char ch=getchar();
    while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
    if(ch=='-')o=-1,ch=getchar();
    while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    return x*o;
}
int ans[20];
map<string,int>Map;
map<int,string>Mapp;
int main(){
    int n=read();
    for(int i=1;i<=n;++i){
        string s;cin>>s;
        Map[s]=i;Mapp[i]=s;
    }
    for(int i=1;i<=n;++i){
        string s;cin>>s;
        int sum=read(),num=read(),ave;
        if(!sum||!num)continue;
        ans[Map[s]]-=sum;
        if(sum%num)ave=floor(sum/num),ans[Map[s]]+=sum-num*ave;
        else ave=sum/num;
        for(int j=1;j<=num;++j){
            cin>>s;ans[Map[s]]+=ave;
        }
    }
    for(int i=1;i<=n;++i){
        cout<<Mapp[i]<<" "<<ans[i]<<endl;
    }
    return 0;
}

ブラックフライデー第十三金曜日

質問の意味:13号は金曜日です。それを他の日に比べて少ない金曜日の13号?落ちる月曜日から日曜日まで第十三月の回数の計算を必要とする手順を記述し、この質問に答えるために。所与のサイクルNでは、必要な計算1900年1月1日〜1900 + N-1年第十三日本日曜日、月曜日12月31日に当たる周波数に、Nは正の整数ではありません。ここ以上400です。あなたが知っておく必要があるものがあります:1は、1900年1月1日から9月月曜日.2,4,6,11他の月は2月を除いて30日を持っている31日の閏年を持ち、2月は29日あり、非うるう年2月は4で割り切れる年はうるう年である(1992年= 4 * 498がそう1992年がうるう年であるが、1990年はうるう年ではありません)0.4、上記のルールは、世紀の年には適していません、28日0.3持っています。それはそれ以外の場合は平均、閏年として400世紀で割り切れることができます。だから、1700,1800,1900および2100は、閏年であるが、2000年はうるう年です。

質問の直接シミュレーションの意味は、ライン上の大きなさつき月2月とうるう年うるう年のいくつかの詳細に注意を払います。

//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
inline int read(){
    int x=0,o=1;char ch=getchar();
    while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
    if(ch=='-')o=-1,ch=getchar();
    while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    return x*o;
}
int ans[10];
inline int pd(int n){
    if(n%100!=0&&n%4==0)return 1;
    if(n%100==0&&n%400==0)return 1;
    return 0;
}
inline int PD(int n){
    if(n==0)return 2;
    if(n==2)return 0;
    if(n==4||n==6||n==9||n==11)return 1;
    return 2;
}
int main(){
    int n=read();
    int last=13%7;++ans[last];
    int year=1900,month=1,bj1=0,bj2=2;
    for(int i=2;i<=n*12;++i){
        ++month;
        if(month==13){
            month=1;++year;
            bj1=pd(year);
        }
        bj2=PD(month-1);
        if(bj2==0){
            if(bj1==0)++ans[last];  
            else{
                ++last;if(last==8)last=1;
                ++ans[last];
            }
        }
        if(bj2==1){
            last+=2;last=(last+7)%7;if(last==0)last=7;
            ++ans[last];
        }
        if(bj2==2){
            last+=3;last=(last+7)%7;if(last==0)last=7;
            ++ans[last];
        }
    }
    cout<<ans[6]<<" "<<ans[7]<<" ";
    for(int i=1;i<=5;++i)cout<<ans[i]<<" ";
    cout<<endl;
    return 0;
}

壊れたネックレス壊れたネックレス

イタリアこと:rで指定されたもの、Bは、長さWの三種類は、n OFFがネックレスから得られる構成ネックレス、小文字して、異なる色のビーズに遭遇するまで、一端から同じ色のビーズの収集を開始し、同じことをやって、他の終わりに(色はこの前のコレクションとは異なる場合があります)。それはネックレスはどこビーズの最大数を収集するために決定破る必要があります。両方のR Wとして見ることができることに留意されたい、Bも見ることができる。最大数を決定することができます。

分析:まず、ストランドが大きな列挙オフの位置に倍長く、その後、小さな文字列になるように、基本的な動作は切断されたリングですが、私たちは、両端にこの質問を見つける必要があり、私たちは、元の文字列より3倍長いを持っているので、 2つの最長の各かどうかを決定するために、文字列の途中から開始します。

#include<bits/stdc++.h>
using namespace std;
string a;
int n,ans=-1;
int f(int x){
    int s=0;
    char a1=a[x];
    char b2=a[x+1];
    for(int i=x;;i--){
        if(a[i]==a1)s++;
        else if(a[i]=='w') s++;
        else break;
    }
    for(int i=x+1;;i++){
        if(a[i]==b2)s++;
        else if(a[i]=='w')s++;
        else break;
    }
    return s;
}
int main(){
    cin>>n;
    cin>>a;
    a=a+a+a;
    for(int i=n;i<2*n;i++){
        if(a[i]==a[i+1]) continue;
        if(a[i]=='w'){
            a[i]='r';
            ans=max(ans,f(i));
            a[i]='b';
            ans=max(ans,f(i));
            a[i]='w';
        }
        ans=max(ans,f(i));
    }
    ans=min(ans,n);
    if(ans==-1) ans=n;
    cout<<ans<<endl;
    return 0;
}

おすすめ

転載: www.cnblogs.com/PPXppx/p/11262664.html