kotonoha_pcg@ぷろこんにっき

ここ(http://kotonoha-pcg.hatenablog.com/)の別館です、競プロの話が殆どです。最近mdモードに変えて一気に使い勝手が変わりました。

今日解いたもの

AOJ 0535 Crossing Black Ice

 簡単そうに見えて簡単じゃなかった.辛い.理屈としては,1と0で示された図の中で,1がある個所を最大でいくつ回れるかを求める.再帰を使う&最大値を求めるので,max()を使う,再帰は別の自作関数で適当に記述する,の3つは想像ついたし書いたけど,max()を書く過程で,比較するものが解らなかったりした.必要だったのはほぼそこだけで,それ以外は特に変えることもなく書いた.
ACコード

//AOJ 0535 Crossing Black Ice non-submited code.
//??????????????°??????????????°???????????¨??????
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <functional>
using namespace std;
 
#define rep(i,n) for(int i=1;i<=n;i++)
typedef long long ll;
 
#define MAX 92
 
int map[MAX][MAX];
//node ex.
int vx[]={1,0,-1,0};
int vy[]={0,1,0,-1};
 
int dfs(int y, int x){
    if(map[y][x]==0) return 0;
    int res=0;
    map[y][x]=0;
    for(int i=0;i<4;i++){
        res=max(res, 1+dfs(y+vy[i],x+vx[i]));
    }
    map[y][x]=1;
    return res;
}
 
int main(){
    int m,n;
     
    while(cin>>m>>n,m||n){
        memset(map, 0, sizeof(map));
        int ans=0;
        rep(i,m)
            rep(j,n)
                cin>>map[i][j];
         
        rep(i,n){
            rep(j,m){
                ans=max(ans,dfs(i,j));
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

AOJ 0573 Receipt

 一回whileを書くのを忘れていて,WAをもらったりして辛い.凡ミスすぎた.やるだけ.初期化をしっかりしいていれば問題無し.

// AOJ Problems id:0573 Receipt Accepted Code.
#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;

#define rep(i,n) for(int i=0;i<n;i++)
#define repeat(a,b,c) for(int a=b;a=c;a++)
#define pb push_back
#define md 10000007

int main()
{
    int n;
    while(cin>>n){
        if(n==0) break;
        int ans=0;
        rep(i,10){
            int x=0;
            cin>>x;
            ans+=x;
        }
        cout<<n-ans<<endl;
    }
    return 0;
}