今日解いたもの
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; }