gotutiyan’s blog

競技プログラミングをやったりopenframeworksでお絵かきをしたりしています。

ARC 011 A 鉛筆リサイクルの新技術

問題
鉛筆の初期値Nがあり、m本あればn本新たに作ることができる。最終的に何本の鉛筆を売れるか。

解法
まず、答えは「N+新たに生成された鉛筆」となる。

以下のコードでは、resという現在手元にある鉛筆を格納する変数を作り(初期値はN)、答えとなる変数はNをそのまま流用している。

制約のm>nより、手元にある鉛筆は必ず少なくなっていく。m本からn本生成することを考えると、手元の鉛筆は生成の度に(m-n)本ずつ少なくなっていく。また、n本生成された新しい鉛筆は、答えとなるNに足される。

ここで、余った鉛筆は特に意識せずともresの中に残っていることも嬉しい。

問題全体では、どうせ売った鉛筆は全て回収するため、常に手元にあると考えて差し支えない。

int main() {
    int m,n,N;
    cin>>m>>n>>N;
    int res=N;
    while(1){
        if(res<m)break;
        res-=m;
        res+=n;
        N+=n;
    }
    cout<<N<<endl;
    return 0;
}