読者です 読者をやめる 読者になる 読者になる

CODE FESTIVAL 2014 予選A

atcoder

はい。 oox-
C問題は時間内になんとか出来そうだったけど時間が一部codeforcesと重複していたし、学生ではないので上位を狙う必要がなかったので途中で切り上げました。
http://code-festival-2014-quala.contest.atcoder.jp/

A - CODE FESTIVAL 2014

問題文では明記されておらずClarでツッコミが入っていたが末尾に2014を付け足して出力する。

print raw_input()+'2014'
#include<iostream>
#include<cmath>
#include<string>
#include<cctype>
#include<vector>
#include<numeric>
#include<algorithm>
using namespace std;

int main(){
        double pai=3.141592653589;
        char w[20];
        scanf("%s",w);
        printf("%s2014\n",w);
        return 0;
}

まぁこういう問題ならLL言語のが圧倒的に書きやすいと思う。。

B - とても長い文字列

文字列Sは文字列Aを10100だけ繋げたもので構成されている。そしてB番目の文字は何か??

A=raw_input()
B=input()
l=len(A)
print A[(B%l)-1]
#include<iostream>
#include<cmath>
#include<string>
#include<cctype>
#include<vector>
#include<numeric>
#include<algorithm>
using namespace std;

int main(){
        string A;
        long long B;
        cin>>A;
        cin>>B;
        int len,chk;
        len=A.size();
        chk=B%len-1;
        if(chk<0) chk=len-1;
        cout<<A[chk]<<endl;
        return 0;
}

文字列の先頭から探したりシミュすると多分時間が足りなくなるので、単純に 探す番目%繰り返す文字列 で周期性を利用する。
C++で書いた方はchkの値が-1だった時にAの末尾を見に行ってなかったらしかったりとか入出力で苦戦した。。。しょぼい。。

C - 2月29日

AからBの間にうるう年が何回あるか??

n,k=map(int,raw_input().split())
ans=chk=0
na=n/4-n/100+n/400
ka=k/4-k/100+k/400


def leap(y):
    if (y%400==0) or (y%100!=0 and y%4==0): chk=1
    else: chk=0
    return chk

if k-n:
    print ka-na+leap(n)
else:
    print 0 if n%4 or (n%100==0 and n%400!=0) else 1
#include<iostream>
#include<cmath>
#include<string>
#include<cctype>
#include<vector>
#include<numeric>
#include<algorithm>
using namespace std;

int main(){
        long long A,B,ac,bc;
        cin>>A>>B;
        int f=0;
        if(A%400==0 || (A%100!=0 && A%4==0)) f=1;
        ac=A/4-A/100+A/400;
        bc=B/4-B/100+B/400;
        cout<<bc-ac+f<<endl;
        return 0;
}

うるう年の個数はA/4-A/100+A/400で多分求まる。B-Aでうるう年がある数の差分が出せるがA自体がうるう年であった場合は滞在に含むので1調整。

D - 壊れた電卓

後で