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; }