atcoder ふか杯

1. 問題 http://fuka5.contest.atcoder.jp/tasks/fuka_credit

int main(void){
   int n,k;
   while(cin >> n >> k ,n|k){
      vector<int > ve;
      rep(i,n){
         int a;
         cin >> a;
         ve.push_back(a);
      }
      sort(ve.begin(),ve.end());
      int cnt(0);
      rep(i,n){
         cnt += ve[i];
         if( i+1 == k){
            cout << cnt << endl;
            break;
         }
      }
   }
   return 0;
}

2. しりませんw

3.問題 http://fuka5.contest.atcoder.jp/tasks/fuka_liquid

dfsで解く

int table[21][21];
int cnt,w,h,p;

void dfs(int  y,int x,int value,int step){
 table[y][x] = INT_MAX;
 cnt++;
 int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
 rep(i,4){
	int xx = x+dx[i],yy=y+dy[i];
	if(xx >= 0 && xx < w && yy >= 0 && yy < h && table[yy][xx] < value){
	 dfs(yy,xx,table[yy][xx],step+1);
	}
 }
}

int main(void){
 while(cin >> w >> h >>p ){
	if(w == 0 && h == 0 && p == 0) break;
	fi(table,21,0);
	cnt = 0;
	rep(i,h){
	 rep(j,w){
		cin >> table[i][j];
	 }
	}
	rep(i,p){
	 int y,x;
	 cin >> x >> y;
	 if(table[y][x] < INT_MAX)
		dfs(y,x,table[y][x],cnt);
	}
	cout << cnt << endl;
 }
 return 0;
}