0% found this document useful (0 votes)
20 views3 pages

Samsung

Uploaded by

resign please
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views3 pages

Samsung

Uploaded by

resign please
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

#include<bits/stdc++.

h> /*aggressive_cows*/ using namespace std; bool A; return 0; } #include<iostream>//burst true// #define endl ”\n” using
Comperator(int x,int a[],int n,int k){int currentCows=1;int leftmost=0;for(int namespace std; int f(int i, int j, int v[], int dp[][502], int n){ if(i>j) return 0; int
i=1;i<n;++i){if(a[i]-a[leftmost]>=x){leftmost=i;++currentCows;if(currentCows==k)return ans = -1e9; if(dp[i][j]!=-1) return dp[i][j]; for(int ind=i; ind<=j; ind++){ int
1;}}return 0;} int main(){int t;cin»t;for(int i=0;i<t;++i){int n,k;cin»n»k;int c; if((i-1==0)&&(j+1==n-1)) c=v[ind]+f(i,ind-1,v,dp,n)+f(ind+1,j,v,dp,n);
a[100000];for(int j=0;j<n;++j){cin»a[j];}sort(a,a+n);int l=0,r=a[n-1]- else c=v[i-1]*v[j+1]+f(i,ind-1,v,dp,n)+f(ind+1,j,v,dp,n); ans=(ans>c)?ans:c;
a[0]+1;while(r-l>0){int m=(l+r+1)/2;if(Comperator(m,a,n,k)==true){l=m;}else } return dp[i][j]=ans; } int main(){ int n; cin»n; int v[502]; v[0]=1; for(int
r=m-1;}cout«l«’\n’;}} #include <iostream>/*broken_number*/ using names- i=1;i<=n;i++) cin»v[i]; v[n+1]=1; int dp[502][502]; for(int i=0;i<=n+1;i++)
pace std; #define ll long long ll n, m, o, k; ll a[20]; ll b[20]; char operators[] for(int j=0;j<=n+1;j++) dp[i][j]=-1; cout«f(1,n,v,dp,n+2)«endl; return 0; }
= {’+’, ’-’, ’*’, ’/’}; bool valid(string s) { if (s.size() == 0) return false; for #include<bits/stdc++.h>/*camel*/ using namespace std; int n; int a[20];
(int i = 0; i < s.size(); i++) { if (s[i] == ’+’ || s[i] == ’-’ || s[i] == ’*’ || s[i] bool visA[20], visB[20]; int ans; void back(bool isLeft, int cost){ int cnt=0;
== ’/’) { if (s[s.size() - 1] == ’=’) return true; else return false; } } return for(int i=0;i<n;i++){ if(visB[i]) cnt++; } if(cnt==n){ ans=min(ans,cost);
true; } ll calculate(string &s) { ll result = 0, current = 0; char operation = return; } if(isLeft){ for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){
’.’; for (ll i = 0; i < s.size(); i++) { if (s[i] >= ’0’ && s[i] <= ’9’) { current if(visA[i]&&visA[j]){ visA[i]=false; visA[j]=false; visB[i]=true; visB[j]=true;
= current * 10 + (s[i] - ’0’); } else { if (operation == ’+’) result += current; back(false,cost+max(a[i],a[j])); visA[i]=true; visA[j]=true; visB[i]=false;
else if (operation == ’-’) result -= current; else if (operation == ’*’) result *= visB[j]=false; } } } } else{ for(int i=0;i<n;i++){ if(visB[i]){ visB[i]=false;
current; else if (operation == ’/’ && current != 0 && result % current == visA[i]=true; back(true,cost+a[i]); visB[i]=true; visA[i]=false; } } } } void
0) result /= current; else if (operation == ’.’) result = current; current = 0; solve(){ cin»n; for(int i=0;i<n;i++) cin»a[i]; memset(visA,true,sizeof(visA));
operation = s[i]; } } if (s[s.size() - 1] != ’=’) result = current; return result; } memset(visB,false,sizeof(visB)); ans=INT_MAX; back(true,0); cout«ans«endl;
ll minOperations; void findSolution(string &s, ll opCount, bool operatorUsed) } int main(){ int t; cin»t; while(t--) solve(); return 0; } #include<bits/stdc++.h>
{ if (opCount > o || s.size() > minOperations || (valid(s) && calculate(s) > /*car_fule*/using namespace std; int n,a[20],ans; void back(int car,int dis,int
1000)) return; if (operatorUsed) { if (opCount < o && s[s.size() - 1] >= ’0’ && pos,int type,int fuel){ if(dis>ans) return; if(car==n){ ans=min(ans,dis);
s[s.size() - 1] <= ’9’) { string temp = s + ’=’; ll ans = calculate(temp); if (ans return; } if(pos==0){ back(car,dis+1,pos+1,1,2); return; } if(pos==n+1){
== k) minOperations = (minOperations < (opCount + 1)) ? minOperations back(car,dis+1,pos-1,2,2); return; } int nextPos,refillCost,refillLoc; if(type==1){
: (opCount + 1); } } else if (s.size()) { ll ans = calculate(s); if (ans == k) nextPos=1; refillCost=pos; refillLoc=0; } else{ nextPos=-1; refillCost=n-
minOperations = (minOperations < opCount) ? minOperations : opCount; } pos+1; refillLoc=n+1; } if(type==a[pos]){ if(fuel>0){ int x=a[pos]; a[pos]=0;
for (ll i = 0; i < n; i++) { string temp = s + char(a[i] + ’0’); findSolution(temp, back(car+1,dis+1,pos+nextPos,type,fuel-1); back(car+1,dis+refillCost,refillLoc,type,fuel);
opCount + 1, operatorUsed); } if (s.size() && s[s.size() - 1] >= ’0’ && s[s.size() a[pos]=x; } back(car,dis+1,pos+nextPos,type,fuel); } else{ back(car,dis+1,pos+nextPos,type,fuel);
- 1] <= ’9’ && opCount < o - 1) { for (ll i = 0; i < m; i++) { string temp } } void solve(){ cin»n; for(int i=1;i<=n;i++) cin»a[i]; ans=INT_MAX;
= s + operators[b[i] - 1]; findSolution(temp, opCount + 1, true); } } } void back(0,0,0,0,0); cout«ans-1«endl; } int main(){ int t; cin»t; while(t--) solve();
solve() { cin » n » m » o; for (ll i = 0; i < n; i++) cin » a[i]; for (ll i = 0; i return 0; } #include <iostream> /*chess*/#include <stdio.h>#include
< m; i++) cin » b[i]; cin » k; minOperations = 1e18; string expression = ””; <cstring>using namespace std; struct data { int x; int y; int level; }; data
findSolution(expression, 0, false); cout « minOperations « ”\n”; } int main() queue[10000]; int front,rear; int mv[8][2]={{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-
{ ios_base::sync_with_stdio(0); cin.tie(0); ll testCases; cin » testCases; while 2},{-1,-2},{-2,-1}}; void push(data d) { queue[rear++]=d; } data pop() {
(testCases--) solve(); return 0; } #include <iostream> /*burst_ballons*/ using return queue[front++]; } bool empty() { return front==rear; } int main()
namespace std; int maxCoins(int* nums, int size) { int** dp = new int*[size]; { int T; cin»T; for(int t=1;t<=T;t++){ int n,m,r1,c1,r2,c2; cin»n»m; int
for (int i = 0; i < size; i++) { dp[i] = new int[size]; for (int j = 0; j < size; a[101][101]; memset(a,0,sizeof(a)); cin»r1»c1»r2»c2; data d,d1,d2; front=0;
j++) { dp[i][j] = 0; } } for (int len = 1; len <= size; len++) { for (int i = rear=0; d.x=r1; d.y=c1; d.level=0; push(d); a[d.x][d.y]=2; int tmx,tmy,tml;
0; i <= size - len; i++) { int j = len + i - 1; for (int k = i; k <= j; k++) int steps=0; bool f=false; while(!empty()){ if(f)break; d1=pop(); for(int
{ int leftValue = 1; int rightValue = 1; if (i != 0) leftValue = nums[i - 1]; if k=0;k<8;k++){ tmx=d1.x+mv[k][0]; tmy=d1.y+mv[k][1]; tml=d1.level+1;
(j != size - 1) rightValue = nums[j + 1]; int before = 0; int after = 0; if (i if(tmx>=1&&tmx<=n&&tmy>=1&&tmy<=m&&a[tmx][tmy]==0){ if(tmx==r2&&tmy==c2){
!= k) before = dp[i][k - 1]; if (j != k) after = dp[k + 1][j]; dp[i][j] = (dp[i][j] steps=tml; f=true; break; } d2.x=tmx; d2.y=tmy; d2.level=tml; push(d2);
> leftValue * nums[k] * rightValue + before + after) ? dp[i][j] : leftValue a[d2.x][d2.y]=2; }}} if(!f){ steps=-1; } cout«steps«endl; } return 0; } #in-
* nums[k] * rightValue + before + after; } } } int result = dp[0][size - 1]; clude<iostream>//convex_false// #include<vector> #include<algorithm>
for (int i = 0; i < size; i++) { delete[] dp[i]; } delete[] dp; return result; } using namespace std; struct Point{ int x,y; }; int orientation(Point p,Point
int main() { int siz; cin » siz; int* A = new int[siz]; for (int i = 0; i < siz; q,Point r){ int val=(q.y-p.y)*(r.x-q.x)-(q.x-p.x)*(r.y-q.y); if(val==0)return 0;
i++) { cin » A[i]; } int ans = maxCoins(A, siz); cout « ans « endl; delete[] return (val>0)?1:2; } bool cmp(Point a,Point b){ return (a.x==b.x)?(a.y<b.y):(a.x<b.y);

1 2

} bool myFunc(Point a,Point b){ return (a.x==b.x&&a.y==b.y); } void con- 0; } #include<iostream>//detect_cycle_directed.cpp// #include<queue>
vexHull(Point* points,int n){ if(n<3){ cout«”-1”; return; } vector<Point> using namespace std; #define endl ”\n” #define int long long int adj[15][15];
hull; int l=0; for(int i=1;i<n;i++) if(points[i].x<points[l].x) l=i; int int n,m; void solve(){ cin»n»m; int edge[m][2]; for(int i=0;i<m;i++){ int u,v;
p=l,q; do{ hull.push_back(points[p]); q=(p+1)%n; for(int i=0;i<n;i++) cin»u»v; adj[u][v]=1; edge[i][0]=u; edge[i][1]=v; } int sum=1e9; int path[15]; int
if(orientation(points[p],points[i],points[q])==2) q=i; p=q; }while(p!=l); path_size=0; for(int i=0;i<m;i++){ int u=edge[i][0],v=edge[i][1]; adj[u][v]=0;
sort(hull.begin(),hull.end(),cmp); auto ip=unique(hull.begin(),hull.end(),myFunc); int d[n+1]; for(int j=1;j<=n;j++) d[j]=1e9; d[v]=v; int q[100],front=0,back=0;
hull.resize(distance(hull.begin(),ip)); if(hull.size()<3){ cout«”-1”; return; }else{ q[back++]=v; int par[15]; par[v]=v; while(front<back){ int x=q[front++];
for(int i=0;i<hull.size();i++){ cout«hull[i].x«” ”«hull[i].y; if(i!=hull.size()- for(int y=1;y<=n;y++){ if(adj[x][y]&&d[x]+y<d[y]){ d[y]=d[x]+y; par[y]=x;
1) cout«”, ”; } } } int main(){ int t,n; cin»t; while(t--){ cin»n; Point* q[back++]=y; } } } if(d[u]<sum){ sum=d[u]; path_size=0; while(par[u]!=u){
points=new Point[n]; for(int i=0;i<n;i++){ cin»points[i].x»points[i].y; path[path_size++]=u; u=par[u]; } path[path_size++]=u; } adj[u][v]=1; }
} convexHull(points,n); cout«”\n”; delete[] points; } return 0; } #in- for(int i=0;i<path_size-1;i++){ for(int j=i+1;j<path_size;j++){ if(path[i]>path[j]){
clude<iostream>//convex// #include<algorithm> using namespace std; struct int temp=path[i]; path[i]=path[j]; path[j]=temp; } } } for(int i=0;i<path_size;i++)
Point{ int x,y; }; int getRotationAngle(Point a,Point b,Point c){ return((b.x- cout«path[i]«’ ’; cout«endl; } int32_t main(){ solve(); return 0; } #in-
a.x)*(c.y-a.y))-((b.y-a.y)*(c.x-a.x)); } void outerTrees(Point* trees,int n){ clude<iostream>//detect_cycle_undirected// using namespace std; int nodes,
if(n<=3){ for(int i=0;i<n;++i){ if(i!=n-1){ cout«trees[i].x«” ”«trees[i].y«”, ”; edges; int adj[100][100] = {0}; bool findCycle(int node, bool visited[], int parent,
}else{ cout«trees[i].x«” ”«trees[i].y; } } return; } Point upperHull[n]; int upper- int& prev){ visited[node] = true; for(int j = 0; j < nodes; j++){ if(adj[node][j]
Size=0; upperHull[upperSize++]=trees[0]; upperHull[upperSize++]=trees[1]; == 1 && !visited[j]){ if(findCycle(j, visited, node, prev)){ if(node == prev){
for(int i=2;i<n;++i){ while(upperSize>=2&&getRotationAngle(upperHull[upperSize- cout«node«” ”; prev = -1; } else if(prev != -1) cout«node«” ”; return true;
2],upperHull[upperSize-1],trees[i])>0){ upperSize--; } upperHull[upperSize++]=trees[i]; } } else if(adj[node][j] == 1 && visited[j] && parent != j){ cout«node«” ”;
} Point lowerHull[n]; int lowerSize=0; lowerHull[lowerSize++]=trees[n-1]; prev = j; return true; } } return false; } int main(){ cin»nodes»edges; int
lowerHull[lowerSize++]=trees[n-2]; for(int i=n-3;i>=0;--i){ while(lowerSize>=2&&getRotationAngle(lowerHull[lowerSize- u,v; while(edges--){ cin»u»v; adj[u][v] = 1; adj[v][u] = 1; } bool visited[nodes]
2],lowerHull[lowerSize-1],trees[i])>0){ lowerSize--; } lowerHull[lowerSize++]=trees[i]; = {false}; int parent = -1, prev = -1; if(!findCycle(0, visited, parent, prev))
} Point result[2*n]; int resultSize=0; for(int i=0;i<upperSize;++i){ re- cout«”-1”; return 0; } #include <iostream>//doctor_probability// using
sult[resultSize++]=upperHull[i]; } for(int i=0;i<lowerSize;++i){ bool dupli- namespace std; void docProb(double **graph, int nodes, int time, int curNode,
cate=false; for(int j=0;j<resultSize;++j){ if(lowerHull[i].x==result[j].x&&lowerHull[i].y==result[j].y){ double p, double *answer) { if (time <= 0) { answer[curNode] += p; return;
duplicate=true; break; } } if(!duplicate){ result[resultSize++]=lowerHull[i]; } for (int i = 0; i < nodes; i++) { if (graph[curNode][i] != 0) { double
} } for(int i=0;i<resultSize;++i){ if(i!=resultSize-1){ cout«result[i].x«” ”«re- originalProb = p; p *= graph[curNode][i]; docProb(graph, nodes, time - 10,
sult[i].y«”, ”; }else{ cout«result[i].x«” ”«result[i].y; } } } int main(){ int t,n; i, p, answer); p = originalProb; } } } int main() { int t; cin » t; while (t--)
cin»t; while(t--){ cin»n; Point* trees=new Point[n]; for(int i=0;i<n;++i){ { int nodes, edges, time; cin » nodes » edges » time; double **arr = new
cin»trees[i].x»trees[i].y; } outerTrees(trees,n); cout«”\n”; delete[] trees; double*[nodes]; for (int i = 0; i < nodes; i++) { arr[i] = new double[nodes];
} return 0; } #include<iostream> /*crow_pot*/ #include<algorithm> for (int j = 0; j < nodes; j++) { arr[i][j] = 0; } } int from, to; double prob;
using namespace std; int n, k; void merger(int *overflow_numbers, int for (int i = 0; i < edges; i++) { cin » from » to » prob; arr[from - 1][to
l, int m, int r){ int i,j,k; int n1=m-l+1; int n2=r-m; int L[n1], R[n2]; - 1] = prob; } double *answer = new double[nodes](); docProb(arr, nodes,
for(int i=0; i<n1; i++){ L[i]=overflow_numbers[l+i]; } for(int j=0; j<n2; time, 0, 1.0, answer); double finalProb = 0.0; int finalDivision = 0; for (int
j++){ R[j]=overflow_numbers[m+1+j]; } i=0; j=0; k=l; while(i<n1 i = 0; i < nodes; i++) { if (answer[i] > finalProb) { finalProb = answer[i];
&& j<n2){ if(L[i]<=R[j]){ overflow_numbers[k]=L[i]; i++; }else{ over- finalDivision = i; } } cout « finalDivision + 1 « ” ” « fixed « finalProb «
flow_numbers[k]=R[j]; j++; } k++; } while(i<n1){ overflow_numbers[k]=L[i]; ”\n”; for (int i = 0; i < nodes; i++) { delete[] arr[i]; } delete[] arr; delete[]
k++; i++; } while(j<n2){ overflow_numbers[k]=R[j]; k++; j++; } } answer; } return 0; } #include<iostream> //endoscope//using namespace
void merge_sort(int *overflow, int l, int r){ if(l<r){ int m=l+(r-l)/2; std; int row,col,X,Y,L; int map[1000][1000],visited[1000][1000]; struct node{
merge_sort(overflow, l, m); merge_sort(overflow, m+1, r); merger(overflow, int x,y,l; }; node q[1000000]; int front,back; void init(){ front=0,back=0; }
l, m, r); } } int minCrowPotStoneSecond(int *overflow_numbers){ void push(node temp){ q[back++]=temp; } node pop(){ return q[front++];
int total_stones=0; for(int i=n-1; i>0; i--){ overflow_numbers[i] = } bool empty(){ return front == back; } bool valid(int x,int y){ return
max(0,overflow_numbers[i]-overflow_numbers[i-1]); } for(int i=0; i<k; (x>=0 && x<row && y>=0 && y<col); } bool left(int x,int y){ return
i++){ total_stones+=(overflow_numbers[i]*(n-i)); } return total_stones; } (map[x][y]==1 || map[x][y]==3 || map[x][y]==6 || map[x][y]==7); } bool
int main(){ cin » n; int *arr = new int[n + 1]; for(int i=0;i<n;i++){ cin»arr[i]; right(int x,int y){ return (map[x][y]==1 || map[x][y]==3 || map[x][y]==4 ||
} cin » k; merge_sort(arr, 0, n-1); cout « minCrowPotStoneSecond(arr); return map[x][y]==5); } bool up(int x,int y){ return (map[x][y]==1 || map[x][y]==2 ||

3 4
map[x][y]==4 || map[x][y]==7); } bool down(int x,int y){ return (map[x][y]==1 -1) { color[j] = 1 - color[i]; flag = flag & isBiPartite(j, color); } else if(color[i]
|| map[x][y]==2 || map[x][y]==6 || map[x][y]==5); } int solve(int x,int y,int == color[j]) return false; } } return flag; } int main() { cin » n; int color[n];
l){ int ans = 0; push({x,y,l}); visited[x][y]=1; while(!empty()){ node cur for(int i=0;i<n;i++) { color[i] = -1; for(int j=0;j<n;j++) { cin » arr[i][j]; } }
= pop(); int x = cur.x; int y = cur.y; int l = cur.l; if(l==0) continue; for(int i=0;i<n;i++) { if(color[i]==-1) { color[i] = 0; if(!isBiPartite(i,color))
ans++; if(valid(x,y-1) && left(x,y) && right(x,y-1) && visited[x][y-1]==0){ { cout « ”-1” « endl; return 0; } } } for(int i=0;i<n;i++) { if(color[i] == 0)
push({x,y-1,l-1}); visited[x][y-1]=1; } if(valid(x,y+1) && right(x,y) && cout « i « ” ”; } return 0; } #include <iostream>/*jewels_maze*/#include
left(x,y+1) && visited[x][y+1]==0){ push({x,y+1,l-1}); visited[x][y+1]=1; } <climits>#define MAX 21 using namespace std; int n, ans; bool isValid(int
if(valid(x-1,y) && up(x,y) && down(x-1,y) && visited[x-1][y]==0){ push({x- i, int j){ return (i>=0 && i<n && j>=0 && j<n); } void printMatrix(int
1,y,l-1}); visited[x-1][y]=1; } if(valid(x+1,y) && down(x,y) && up(x+1,y) **arr){ for(int i=0; i<n; i++){ for(int j=0; j<n; j++) cout « arr[i][j] « ” ”; cout
&& visited[x+1][y]==0){ push({x+1,y,l-1}); visited[x+1][y]=1; } } return « endl; } } int dirX[] = {1,0,-1,0}; int dirY[] = {0,1,0,-1}; void jewelMaze(int
ans; } int main(){ int t; cin»t; while(t--){ cin»row»col»X»Y»L; init(); for(int **maze, int x, int y, int value, int **visited, int **path){ if(x == n-1 && y ==
i=0;i<row;i++){ for(int j=0;j<col;j++){ cin»map[i][j]; visited[i][j]=0; } } n-1){ if(value >= ans){ ans = value; for(int i=0; i<n; i++){ for(int j=0; j<n;
if(map[X][Y]>0){ cout«solve(X,Y,L)«endl; } else cout«0«endl; } } #include j++) if(visited[i][j]){ path[i][j] = 3; } else{ path[i][j] = maze[i][j]; } } } return;
<iostream> //fishermen// #include <climits> using namespace std; int g[3], } for(int i=0; i<4; i++){ int newX = x + dirX[i]; int newY = y + dirY[i];
f[3]; int vis[100]; int n; int left(int i) { if(i >= 0){ int d = 0; for(int j = i; j if(isValid(newX, newY)){ if(visited[newX][newY] == 0 && maze[newX][newY]
>= 0; j--){ d++; if(!vis[j]) return d; } } return INT_MAX; } int right(int i) { == 0){ visited[newX][newY] = 1; jewelMaze(maze, newX, newY, value,
if(i < n) { int d = 0; for(int j = i; j < n; j++){ d++; if(!vis[j]) return d; } } visited, path); visited[newX][newY] = 0; } if(visited[newX][newY] == 0 &&
return INT_MAX; } int dist(int gate){ int pos = g[gate]-1; int d = 0; for(int maze[newX][newY] == 2){ visited[newX][newY] = 1; jewelMaze(maze, newX,
i = 0; i < f[gate]; i++){ if(!vis[pos]){ d += 1; vis[pos] = true; } else { int newY, value+1, visited, path); visited[newX][newY] = 0; } } } } int main(){
l = left(pos-1); int r = right(pos+1); if(l < r) { d += l+1; if(pos - l >= 0) int t; cin » t; while(t--){ cin » n; int **maze = new int * [n + 1]; for(int i=0;
vis[pos-l] = true; } else { d += r+1; if(r + pos < n) vis[r+pos] = true; } } i<n; i++){ maze[i] = new int[n + 1]; } int **visited = new int * [n + 1];
} return d; } int calc(int x[]){ int d = 0; for(int i = 0; i < n; i++) vis[i] = for(int i=0; i<n; i++){ visited[i] = new int[n + 1]; } int **path = new int *
false; for(int i = 0; i < 3; i++) d += dist(x[i]); return d; } int main(){ cin » [n + 1]; for(int i=0; i<n; i++){ path[i] = new int[n + 1]; } for(int i=0; i<n;
n; for(int i = 0; i < 3; i++) cin » g[i]; for(int i = 0; i < 3; i++) cin » f[i]; int i++){ for(int j=0; j<n; j++){ cin » maze[i][j]; visited[i][j] = 0; path[i][j] = 0;
perm[6][3] = {{0, 1, 2}, {0, 2, 1}, {1, 0, 2}, {1, 2, 0}, {2, 0, 1}, {2, 1, 0}}; int } } ans = INT_MIN; int sX = 0, sY = 0; visited[sX][sY] = 1; if(maze[sX][sY]
min_d = INT_MAX; for(int i = 0; i < 6; i++){ int d = calc(perm[i]); if(d < == 2) jewelMaze(maze, sX, sY, 1, visited, path); else jewelMaze(maze, sX,
min_d) min_d = d; } cout « min_d « endl; return 0; } #include <iostream> sY, 0, visited, path); printMatrix(path); cout « ans « endl; } return 0; }
//frog_jump// #include <climits> using namespace std; #define QS 1000005 #include <iostream>//kim.cpp// #include <cmath> #include <climits>
struct Point { int x, y; }; int n, sX, sY, tX, tY; int mat[105][105], dis[105][105], using namespace std; const int MAX_N = 12; int cust[MAX_N][2], dp[1 «
vis[105][105]; Point queue[QS]; int front = 0, rear = 0; int dirX[] = {1, 0, -1, MAX_N][MAX_N]; int solve(int n, int ox, int oy, int hx, int hy) { for (int
0}; int dirY[] = {0, 1, 0, -1}; bool isValid(int i, int j) { return (i >= 0 && i mask = 0; mask < (1 « n); ++mask) for (int i = 0; i < n; ++i) dp[mask][i] =
< n && j >= 0 && j < n); } void calculateFrogJump() { queue[rear].x = sX; INT_MAX; for (int i = 0; i < n; ++i) dp[1 « i][i] = abs(ox - cust[i][0]) + abs(oy
queue[rear].y = sY; rear = (rear + 1) % QS; vis[sX][sY] = 1; dis[sX][sY] = - cust[i][1]); for (int mask = 1; mask < (1 « n); ++mask) for (int i = 0; i < n;
0; while (front != rear) { int p = queue[front].x; int q = queue[front].y; front ++i) { if (!(mask & (1 « i))) continue; for (int j = 0; j < n; ++j) { if (!(mask
= (front + 1) % QS; for (int i = 0; i < 4; i++) { int newX = p + dirX[i]; & (1 « j))) continue; dp[mask][i] = min(dp[mask][i], dp[mask ^ (1 « i)][j] +
int newY = q + dirY[i]; if (isValid(newX, newY) && mat[newX][newY] == abs(cust[i][0] - cust[j][0]) + abs(cust[i][1] - cust[j][1])); } } int ans = INT_MAX,
1 && vis[newX][newY] == 0) { if (i == 1 || i == 3) { dis[newX][newY] = mask = (1 « n) - 1; for (int i = 0; i < n; ++i) ans = min(ans, dp[mask][i] +
dis[p][q]; } else if (i == 0 || i == 2) { dis[newX][newY] = 1 + dis[p][q]; } abs(hx - cust[i][0]) + abs(hy - cust[i][1])); return ans; } int main() { int t; cin » t;
vis[newX][newY] = 1; queue[rear].x = newX; queue[rear].y = newY; rear = int q = 1; while (t--) { int n, ox, oy, hx, hy; cin » n » ox » oy » hx » hy; for (int
(rear + 1) % QS; } } } if (vis[tX][tY]) { cout « dis[tX][tY] « endl; } else { cout i = 0; i < n; ++i) cin » cust[i][0] » cust[i][1]; cout « ”# ” « q « ” ” « solve(n, ox,
« -1 « endl; } } int main() { cin » n; for (int i = 0; i < n; i++) { for (int j = oy, hx, hy) « endl; q++; } return 0; } #include <cmath>//kth_level// #in-
0; j < n; j++) { cin » mat[i][j]; vis[i][j] = 0; dis[i][j] = INT_MAX; } } cin » clude <cstring> #include <cstdio> #include <vector> #include <iostream>
sX » sY » tX » tY; if (sX == tX && sY == tY) { cout « 0 « endl; return 0; #include <algorithm> using namespace std; int tonum(string str) { int num=0;
} calculateFrogJump(); return 0; } #include<iostream> //isbiparite// using for(int i=0;i<str.size();i++) num=num*10+(int(str[i])-48); return num; } int
namespace std; int n; int arr[100][100]={0}; bool isBiPartite(int i,int color[]) main() { int k; cin»k; string s; cin»s; int level=-1, sum=0, n=s.size(); for(int
{ bool flag = true; for(int j=0;j<n;j++) { if(arr[i][j] == 1) { if(color[j] == i=0;i<n;i++) { if(s[i] == ’(’) level++; else if(s[i] == ’)’) level--; else if(level ==

5 6

k) { string tmp; while(i<n && s[i] != ’(’ && s[i] != ’)’) { tmp.push_back(s[i]); cin»n; vector<vector<int»arr; for(int i=0;i<n;i++) { vector<int>temp; for(int
i++; } i--; sum+=tonum(tmp); } } cout«sum«endl; return 0; } #include j=0;j<n;j++) { int x; cin»x; temp.push_back(x); } arr.push_back(temp);
<iostream>//laughing_gas// #include <stdio.h> #include <string.h> using } int ini_mask=1; int total_mask=(1«n)-1; cout«solve(n, arr, 0, ini_mask,
namespace std; typedef struct { int x; int y; int level; } data; int mv[4][2] = total_mask)«endl; } return 0; } #include <iostream> //mens_restroom//
{{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; int main() { int T; cin » T; for (int t = 1; using namespace std; int main() { int t; cin » t; while (t--) { int n, k; cin » n »
t <= T; t++) { int n, m, r, c; cin » n » m; int a[m+1][n+1]; memset(a, 0, k; int v[100] = {0}; while (k--) { int mxLen = 0, lastIdx, cnt = 0; for (int i = 0;
sizeof(int) * m * n); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; i < n; i++) { if (v[i] == 0) cnt++; else cnt = 0; if (cnt >= mxLen) { mxLen
j++) { cin » a[i][j]; } } cin » r » c; data queue[10000]; int front = 0, rear = 0; = cnt; lastIdx = i; } } int s = lastIdx - mxLen + 1; int md = (lastIdx + s) /
data d, d1, d2; int tmx, tmy, tml; d.x = c; d.y = r; d.level = 1; queue[rear++] 2; v[md] = 1; } for (int i = 0; i < n; i++) cout « v[i]; cout « endl; } return 0;
= d; a[d.x][d.y] = 2; while (front != rear) { d1 = queue[front++]; for (int k } #include<iostream>//min_node_sum_cycle// #include<bits/stdc++.h>
= 0; k < 4; k++) { tmx = d1.x + mv[k][0]; tmy = d1.y + mv[k][1]; tml = using namespace std; vector<int> ans; int sum=0; void solve(int i, int start, vec-
d1.level + 1; if (a[tmx][tmy] == 1) { d2.x = tmx; d2.y = tmy; d2.level = tor<vector<int» &graph, vector<int> &pathVisited, vector<int> &curCycle,
tml; a[d2.x][d2.y] = 2; queue[rear++] = d2; } } } cout « ”Case #” « t « endl; int curSum){ pathVisited[i] = 1; curSum += i; curCycle.push_back(i); for(int
cout « tml - 1 « endl; } return 0; } #include <iostream>//laughing_gas// neigh: graph[i]){ if(!pathVisited[neigh]){ solve(neigh, start, graph, pathVisited,
#include <stdio.h> #include <string.h> using namespace std; typedef struct curCycle, curSum); } if(pathVisited[neigh] && neigh==start){ if(sum==0 ||
{ int x; int y; int level; } data; int mv[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; sum > curSum){ sum = curSum; ans = curCycle; } } } pathVisited[i] = 0;
int main() { int T; cin » T; for (int t = 1; t <= T; t++) { int n, m, r, c; cin curCycle.pop_back(); } vector<int> cycle(vector<vector<int» &graph){ int
» n » m; int a[m+1][n+1]; memset(a, 0, sizeof(int) * m * n); for (int i = 1; n=graph.size(); vector<int> pathVisited(n); vector<int> curCycle; for(int
i <= m; i++) { for (int j = 1; j <= n; j++) { cin » a[i][j]; } } cin » r » c; i=1; i<n; i++){ solve(i, i, graph, pathVisited, curCycle, 0); } if(ans.empty())
data queue[10000]; int front = 0, rear = 0; data d, d1, d2; int tmx, tmy, tml; ans.push_back(0); sort(ans.begin(), ans.end()); return ans; } int main(){ int
d.x = c; d.y = r; d.level = 1; queue[rear++] = d; a[d.x][d.y] = 2; while (front n, m; cin»n»m; vector<vector<int» graph(n+1); for(int i=0; i<m; i++){
!= rear) { d1 = queue[front++]; for (int k = 0; k < 4; k++) { tmx = d1.x int a, b; cin»a»b; graph[a].push_back(b); } vector<int> ans = cycle(graph);
+ mv[k][0]; tmy = d1.y + mv[k][1]; tml = d1.level + 1; if (a[tmx][tmy] == 1) for(size_t i=0; i<ans.size(); i++){ cout«ans[i]«” ”; } cout«endl; return 0; }
{ d2.x = tmx; d2.y = tmy; d2.level = tml; a[d2.x][d2.y] = 2; queue[rear++] #include <iostream>//missing_positive_number.cpp// #include <cmath>
= d2; } } } cout « ”Case #” « t « endl; cout « tml - 1 « endl; } return 0; } using namespace std; int main() { int t; cin » t; while (t--) { int n; cin » n; bool
#include <iostream> //lee_true// #include <climits> using namespace std; allNeg = true; int arr[n]; for (int i = 0; i < n; i++) { cin » arr[i]; if (arr[i] > 0)
const int MAX_N = 12; const int INF = 1e9; int cost[MAX_N][MAX_N]; int allNeg = false; } if (allNeg) { cout « ”1\n”; break; } int i = 0, j = n - 1; while (i
dp[1 « MAX_N][MAX_N]; int minCost(int n) { if (n == 1) return 0; for (int < j) { if (arr[i] < 0) i++; else if (arr[j] >= 0) j--; else { int temp = arr[i]; arr[i] =
mask = 0; mask < (1 « (n - 1)); ++mask) { for (int i = 0; i < (n - 1); ++i) { arr[j]; arr[j] = temp; i++; j--; } } for (int k = 0; k < n; k++) { if (arr[k] >= 0) {
dp[mask][i] = INF; } } for (int i = 0; i < (n - 1); ++i) { dp[1 « i][i] = (cost[0][i i = k; break; } } int maxPos = n - i; for (int x = i; x < n; x++) { if (abs(arr[x])
+ 1] == 0 ? INF : cost[0][i + 1]); } for (int mask = 1; mask < (1 « (n - 1)); > maxPos) continue; arr[i + abs(arr[x]) - 1] = -abs(arr[i + abs(arr[x]) - 1]);
++mask) { for (int i = 0; i < (n - 1); ++i) { if (!(mask & (1 « i))) continue; if (arr[i + abs(arr[x]) - 1] == 0) arr[i + abs(arr[x]) - 1] = -10000001; } bool
for (int j = 0; j < (n - 1); ++j) { if (i == j || !(mask & (1 « j))) continue; int ansFound = false; for (int z = i; z < n; z++) { if (arr[z] >= 0) { cout « z -
cur = dp[mask ^ (1 « i)][j] + (cost[j + 1][i + 1] == 0 ? INF : cost[j + 1][i + i + 1 « ”\n”; ansFound = true; break; } } if (!ansFound) cout « maxPos + 1
1]); dp[mask][i] = min(dp[mask][i], cur); } } } int ans = INF; int mask = (1 « ”\n”; } return 0; } #include<iostream> //monotonic// #include<cmath>
« (n - 1)) - 1; for (int i = 0; i < (n - 1); ++i) { int c = (cost[i + 1][0] == 0 using namespace std; long long func(long long a, long long b, long long c, long
? INF : cost[i + 1][0]); ans = min(ans, dp[mask][i] + c); } return ans; } int long n){ long long res = a * n; res += b * n * floor(log2(n)); res += c * (n *
main() { int t; cin » t; while (t--) { int n; cin » n; for (int i = 0; i < n; ++i) n * n); return res; } int solve(long long a, long long b, long long c, long long
{ for (int j = 0; j < n; ++j) { cin » cost[i][j]; } } cout « minCost(n) « endl; k){ long long low = 1; long long high = (c == 0) ? 1ll * (1e15) : 1ll * (1e6);
} return 0; } #include <cmath> //lee.cpp// #include <cstdio> #include long long ans = 0; while(low <= high){ long long mid = low + (high - low)/2;
<vector> #include <climits> #include <iostream> #include <algorithm> long long val = func(a, b, c, mid); if(val == k){ ans = mid; break; } if(val <
using namespace std; int solve(int n, vector<vector<int»&arr, int index, int k) low = mid+1; else high = mid-1; } return ans; } int main(){ long long a, b,
ini_mask, int total_mask) { if(ini_mask==total_mask) { return arr[index][0]; c, k; cin»a»b»c»k; cout«solve(a, b, c, k); return 0; } #include <iostream>//
} int ans=INT_MAX; for(int i=0;i<n;i++) { if((ini_mask & (1«i))==0) { int oil_mines// #include <climits> using namespace std; int companies, mines,
y=(ini_mask | (1«i)); int temp = arr[index][i]+solve(n, arr, i, y , total_mask); ANS; int MIN(int x, int y){ return (x>=y) ? y : x; } int MAX(int x, int
ans=min(ans, temp); } } return ans; } int main() { int t; cin»t; while(t--) { int n; y){ return (x>=y) ? x : y; } void calculateOilMines(int i, int *oilMines, bool

7 8
*visited, int minV, int maxV, int sum, int nodes, int &ANS){ if(visited[i]){ int - 1] == 1 || region[row][col - 1] == 3)) { visited[row][col - 1] = val + 1;
newMin = MIN(sum, minV); int newMax = MAX(sum, maxV); if(nodes == ++rear; Q[rear].row = row; Q[rear].col = col - 1; } if ((col + 1) <= N &&
companies - 1){ ANS = min(ANS, newMax - newMin); } return; } visited[i] visited[row][col + 1] == 0 && (region[row][col + 1] == 1 || region[row][col + 1]
= 1; int j = (i + 1) % mines; calculateOilMines(j, oilMines, visited, minV, == 3)) { visited[row][col + 1] = val + 1; ++rear; Q[rear].row = row; Q[rear].col
maxV, sum + oilMines[i], nodes, ANS); int newMin = MIN(sum, minV); int = col + 1; } while (front < rear) { ++front; discover(Q[front].row, Q[front].col,
newMax = MAX(sum, maxV); calculateOilMines(j, oilMines, visited, newMin, visited[Q[front].row][Q[front].col]); } } int main() { int T, test_case; cin » T;
newMax, oilMines[i], nodes + 1, ANS); visited[i] = 0; return; } int main() { int for (test_case = 0; test_case < T; test_case++) { int i, j, k, x, y, temp = 0;
t; cin » t; while(t--){ cin » companies » mines; int *oilMines = new int[mines Answer = 9999; cin » N » C; for (i = 0; i < C; i++) { cin » x » y; location[i][0]
+ 1]; bool *visited = new bool[mines + 1]; for(int i=0; i<mines; i++){ cin = x; location[i][1] = y; } for (i = 1; i <= N; i++) for (j = 1; j <= N; j++) cin
» oilMines[i]; visited[i] = 0; } ANS = INT_MAX; for(int i=0; i<mines; i++) » region[i][j]; for (k = 0; k < C; k++) region[location[k][0]][location[k][1]] = 3;
calculateOilMines(i, oilMines, visited, INT_MAX, INT_MIN, 0, 0, ANS); cout init(); Answer = 9999; for (i = 1; i <= N; i++) { for (j = 1; j <= N; j++) {
« ANS « endl; } return 0; } #include <iostream>// omnious_number// using init(); temp = 0; if (region[i][j] == 1) { visited[i][j] = 1; discover(i, j, 1); for
namespace std; int numberOminous(int a, int b, int k, int *delNos, int n){ (k = 0; k < C; k++) if (temp < visited[location[k][0]][location[k][1]]) temp =
int count = 0; for(int i = a; i <= b; i++){ int temp = i; int digitArray[10] visited[location[k][0]][location[k][1]]; if (Answer > temp) Answer = temp; } } }
= {0}; while(temp){ digitArray[temp%10]++; temp /= 10; } int rougeK = cout « Answer - 1 « endl; } return 0; } #include <iostream>//rock_climbing//
0; for(int i=0; i<n; i++){ rougeK += digitArray[delNos[i]]; } if(rougeK < int hillMap[100][100]; int vis[100][100]; struct QueueNode { int row, col; };
k){ count++; } } return count; } int main() { int a, b, k; cin » a » b » QueueNode q[10000]; int isPossible(int n, int m, int mid) { int front = 0, rear =
k; int n; cin » n; int *delNos = new int[n]; for(int i=0; i<n; i++){ cin » 0, i, j, k; for (i = 0; i < n; i++) for (j = 0; j < m; j++) vis[i][j] = 0; q[rear++]
delNos[i]; } cout « numberOminous(a, b, k, delNos, n) « ”\n”; return 0; } = {n - 1, 0}; vis[n - 1][0] = 1; while (front < rear) { i = q[front].row; j =
#include <bits/stdc++.h> //physical_energy //using namespace std; int q[front].col; front++; if (hillMap[i][j] == 3) return 1; for (k = i - mid; k <= i +
dp[5000][5000][10]; int solve(int h, int d, int cost[], int time[], int n) { if (n == mid; k++) { if (k < 0 || k >= n || !hillMap[k][j] || vis[k][j]) continue; vis[k][j] =
0 && d == 0) return 0; if (n == 0) return 1000; if (dp[h][d][n] != -1) return 1; q[rear++] = {k, j}; } if (j != 0 && hillMap[i][j - 1] && !vis[i][j - 1]) { vis[i][j -
dp[h][d][n]; if (cost[n - 1] <= h) { int op1 = solve(h - cost[n - 1], d - 1, cost, 1] = 1; q[rear++] = {i, j - 1}; } if (j != m - 1 && hillMap[i][j + 1] && !vis[i][j +
time, n) + time[n - 1]; int op2 = solve(h, d, cost, time, n - 1); return dp[h][d][n] 1]) { vis[i][j + 1] = 1; q[rear++] = {i, j + 1}; } } return 0; } int findMinDiff(int
= min(op1, op2); } else return dp[h][d][n] = solve(h, d, cost, time, n - 1); } int n, int m) { int left = 0, right = n - 1, mid; while (left <= right) { mid = (left
main() { int h, d; cin » h » d; int cost[] = {4, 5, 2, 3, 6}; int time[] = {200, + right) / 2; if (isPossible(n, m, mid)) right = mid - 1; else left = mid + 1;
210, 230, 235, 215}; memset(dp, -1, sizeof(dp)); cout « solve(h, d, cost, time, } return left; } int main() { int n, m, i, j; std::cin » n » m; for (i = 0; i < n;
5); return 0; } #include <iostream>//pillars// using namespace std; void i++) for (j = 0; j < m; j++) std::cin » hillMap[i][j]; std::cout « findMinDiff(n,
solve(int a[], int vis[], int p1, int p2, int n, int &ans) { if(p1 == p2 && p1 > m) « std::endl; return 0; } #include <iostream> //sinkhole//using namespace
ans) ans = p1; for(int i=0; i<n; ++i) { if(vis[i] == 0) { vis[i] = 1; solve(a, std; #define INT_MAX 100000 int best_xb, best_yb, best_xt, best_yt;
vis, p1 + a[i], p2, n, ans); solve(a, vis, p1, p2 + a[i], n, ans); vis[i] = 0; } } } int best_area = 0, best_sinkholes = INT_MAX; int findMinimumSum(int
int main() { int n; cin»n; int a[n]; for(int i=0; i<n; ++i) cin»a[i]; int vis[n] = dp[][102], int N, int M, int k) { int minSum = INT_MAX; for (int i = 0; i <=
{0}; int ans = -1; solve(a, vis, 0, 0, n, ans); cout«ans; } #include <iostream> N - k; i++) { for (int j = 0; j <= M - k; j++) { int sum = dp[i + k][j + k] - dp[i
//research_team// #define MAX 22 using namespace std; int Answer = 9999; + k][j] - dp[i][j + k] + dp[i][j]; if (sum < minSum) { minSum = sum; if (minSum
int region[MAX][MAX]; int visited[MAX][MAX]; int N, C; int location[5][2]; int <= 1) { best_xb = i + 1; best_yb = j + 1; best_xt = i + k; best_yt = j +
rear = -1; int front = -1; struct queue { int row; int col; } Q[10000]; void init() k; } } } } return minSum; } void updateBestResult(int area, int sinkholes, int
{ int m, n; rear = -1; front = -1; for (m = 0; m < MAX; m++) for (n = 0; n < xb, int yb, int xt, int yt) { if (area > best_area || (area == best_area &&
MAX; n++) visited[m][n] = 0; for (m = 0; m < 10000; m++) Q[m].row = 0, sinkholes < best_sinkholes)) { best_area = area; best_sinkholes = sinkholes;
Q[m].col = 0; } void discover(int row, int col, int val) { int k, cnt = 0; for (k = 0; best_xb = xb; best_yb = yb; best_xt = xt; best_yt = yt; } } int main() {
k < C; k++) if (visited[location[k][0]][location[k][1]] > 0) cnt++; if (cnt >= C) ios_base::sync_with_stdio(0); cin.tie(0); int T; cin » T; for (int t = 1; t <= T;
return; if ((row - 1) >= 1 && visited[row - 1][col] == 0 && (region[row - 1][col] t++) { int N, M; cin » N » M; int A[102][102] = {0}; int K; cin » K; for (int i
== 1 || region[row - 1][col] == 3)) { visited[row - 1][col] = val + 1; ++rear; = 0; i < K; i++) { int x, y; cin » x » y; A[x - 1][y - 1] = 1; } int dp[102][102]
Q[rear].row = row - 1; Q[rear].col = col; } if ((row + 1) <= N && visited[row = {0}; for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { dp[i][j]
+ 1][col] == 0 && (region[row + 1][col] == 1 || region[row + 1][col] == 3)) = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + A[i - 1][j - 1]; } } best_area = 0;
{ visited[row + 1][col] = val + 1; ++rear; Q[rear].row = row + 1; Q[rear].col best_sinkholes = INT_MAX; int left = 1, right = (N < M ? N : M); while
= col; } if ((col - 1) >= 1 && visited[row][col - 1] == 0 && (region[row][col (left <= right) { int mid = (left + right) / 2; int ones = findMinimumSum(dp,

9 10

N, M, mid); if (ones <= 1) { updateBestResult(mid * mid, ones, best_xb, - ’a’] += temp; } for(int i=0; i<26; i++) { if(hash[i] != 0) { char temp = i
best_yb, best_xt, best_yt); left = mid + 1; } else { right = mid - 1; } } cout + ’a’; cout « temp « ” ” « hash[i] « ” ”; } } } int main() { char s[100]; cin »
« best_xb « ” ” « best_yb « ” ” « best_xt « ” ” « best_yt « endl; } return s; mergeAplha(s); return 0; } #include <iostream>//toggle_binary_matrix//
0; } #include <iostream> //spaceship_bomb// #include <climits> using #define fast ios_base::sync_with_stdio(0); cin.tie(0); using namespace std; int
namespace std; int ans; void getMaxCoins(int** b, int isSafe, int r, int c, bool n, m; int v[20][20]; int finalAns; void flip(int col, int v[20][20]) { for (int i =
bomb, int coins, int rows) { if (r < 0 || c >= 5 || c < 0) { ans = max(ans, coins); 0; i < n; i++) { v[i][col] = !v[i][col]; } } void back(int col, int k, int v[20][20])
return; } if (b[r][c] == 1 || b[r][c] == 0) { int new_coins = coins; if (b[r][c] { if (k == 0) { int ans = 0; for (int i = 0; i < n; i++) { int cnt = 0; for
== 1) new_coins++; if (bomb) isSafe--; getMaxCoins(b, isSafe, r - 1, c, bomb, (int j = 0; j < m; j++) { if (v[i][j] == 1) cnt++; } if (cnt == m) ans++; }
new_coins, rows); getMaxCoins(b, isSafe, r - 1, c + 1, bomb, new_coins, rows); finalAns = (ans > finalAns) ? ans : finalAns; return; } if (col >= m) return;
getMaxCoins(b, isSafe, r - 1, c - 1, bomb, new_coins, rows); } else if (b[r][c] back(col + 1, k, v); int cpy[20][20]; for (int i = 0; i < n; i++) for (int j =
== 2) { if (bomb && isSafe <= 0) { ans = max(ans, coins); return; } else if 0; j < m; j++) cpy[i][j] = v[i][j]; for (int p = 1; p <= k; p++) { flip(col,
(bomb && isSafe > 0) { isSafe--; getMaxCoins(b, isSafe, r - 1, c, bomb, coins, cpy); back(col + 1, k - p, cpy); } } void solve() { int k; cin » n » m » k;
rows); getMaxCoins(b, isSafe, r - 1, c + 1, bomb, coins, rows); getMaxCoins(b, for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin » v[i][j]; } }
isSafe, r - 1, c - 1, bomb, coins, rows); } else { bomb = true; isSafe = 4; finalAns = 0; back(0, k, v); cout « finalAns « endl; } int main() { fast; int t;
getMaxCoins(b, isSafe, r - 1, c, bomb, coins, rows); getMaxCoins(b, isSafe, r - cin » t; while(t--) solve(); return 0; } #include <iostream> //tall tax// using
1, c + 1, bomb, coins, rows); getMaxCoins(b, isSafe, r - 1, c - 1, bomb, coins, namespace std; int n; int ans; struct tolls{ int men; int cost; }toll[100]; void
rows); } } } int main() { int t; cin » t; int q = 1; while (t--) { ans = INT_MIN; solve(int cur_pos, int bt3, int bt2, int bt1, int cost){ if(cost>ans) return; int
int r; cin » r; int** b = new int*[r]; for (int i = 0; i < r; i++) b[i] = new int[5]; total_men = bt1 + bt2 + bt3; if(cur_pos==n){ ans=min(ans,cost); return; }
for (int i = 0; i < r; i++) for (int j = 0; j < 5; j++) cin » b[i][j]; int isSafe = solve(cur_pos + 1, bt3, bt2, bt1, cost + toll[cur_pos].cost); solve(cur_pos + 1,
0; getMaxCoins(b, isSafe, r - 1, 1, false, 0, r); getMaxCoins(b, isSafe, r - 1, 2, bt3 + toll[cur_pos].men, bt2, bt1, cost + 2*toll[cur_pos].cost); if(total_men
false, 0, r); getMaxCoins(b, isSafe, r - 1, 3, false, 0, r); cout « ”#” « q « ” ” « > toll[cur_pos].men){ if(toll[cur_pos].men > bt1 + bt2) bt3 = total_men
ans « endl; q++; for (int i = 0; i < r; i++) delete[] b[i]; delete[] b; } return 0; - toll[cur_pos].men; if(toll[cur_pos].men > bt1) bt2 = toll[cur_pos].men
} #include<iostream>//star_align// using namespace std; void setLeft(int n, >=bt1 + bt2 ? 0 : bt2 - toll[cur_pos].men + bt1; solve(cur_pos + 1, 0, bt3,
int m, char** mat, int** left) { for(int i = 0; i < n; i++) { int prevStar = -1; bt2, cost); } } int main() { int t; cin»t; while(t--){ cin»n; for(int i=0; i<n;
for(int j = 0; j < m; j++) { if(mat[i][j] == ’S’) prevStar = j; if(prevStar != i++) cin»toll[i].men»toll[i].cost; ans=99999; solve(0,0,0,0,0); cout«ans«endl; }
-1) left[i][j] = (j - prevStar); } for(int j = 0; j < m; j++) { if(mat[i][j] == ’S’) return 0; } #include <iostream>//wormhole.cpp// #include <cmath> using
break; left[i][j] = (j + (m - prevStar)); } } } void setRight(int n, int m, char** namespace std; struct Pos { long long x1, x2, y1, y2, t; }; Pos p, a[25]; long
mat, int** right) { for(int i = 0; i < n; i++) { int prevStar = -1; for(int j = m long n, visited[25], res; void robot(long long time, pair<long long, long long>
- 1; j >= 0; j--) { if(mat[i][j] == ’S’) prevStar = j; if(prevStar != -1) right[i][j] v) { res = min(res, time + abs(v.first - p.x2) + abs(v.second - p.y2)); for (long
= (prevStar - j); } for(int j = m - 1; j >= 0; j--) { if(mat[i][j] == ’S’) break; long i = 0; i < n; i++) { if (visited[i]) continue; long long dist = abs(a[i].x1
right[i][j] = (prevStar + (m - j)); } } } int solve(int n, int m, char** mat) { - v.first) + abs(a[i].y1 - v.second) + a[i].t; visited[i]++; robot(time + dist,
int** left = new int*[n]; int** right = new int*[n]; for(int i = 0; i < n; i++) { {a[i].x2, a[i].y2}); dist = abs(a[i].x2 - v.first) + abs(a[i].y2 - v.second) + a[i].t;
left[i] = new int[m]; right[i] = new int[m]; for(int j = 0; j < m; j++) { left[i][j] robot(time + dist, {a[i].x1, a[i].y1}); visited[i]--; } } int main() { long long t;
= -1; right[i][j] = -1; } } setLeft(n, m, mat, left); setRight(n, m, mat, right); int cin » t; for (long long j = 1; j <= t; j++) { cin » n; cin » p.x1 » p.y1 » p.x2 »
minShift = 2147483647; for(int j = 0; j < m; j++) { int shift = 0; for(int i = 0; p.y2; for (long long i = 0; i < n; i++) { cin » a[i].x1 » a[i].y1 » a[i].x2 » a[i].y2 »
i < n; i++) { shift += (left[i][j] < right[i][j] ? left[i][j] : right[i][j]); } if(shift < a[i].t; } res = abs(p.x1 - p.x2) + abs(p.y1 - p.y2); robot(0, {p.x1, p.y1}); cout
minShift) minShift = shift; } for(int i = 0; i < n; i++) { delete[] left[i]; delete[] « ”#” « j « ” : ” « res « endl; } return 0; }
right[i]; } delete[] left; delete[] right; return minShift; } int main() { int n, m;
cin » n » m; char** mat = new char*[n]; for(int i = 0; i < n; i++) { mat[i]
= new char[m]; for(int j = 0; j < m; j++) cin » mat[i][j]; } cout « solve(n,
m, mat); return 0; } #include <iostream> //string_compression// using
namespace std; int lengthOfString(char *str) { int len = 0, i = 0; while(str[i] !=
’\0’) { len++; i++; } return len; } void mergeAplha(char *str) { int lenString
= lengthOfString(str); int hash[26] = {0}; for(int i=0; i<lenString; i++) {
char letter = str[i]; i++; int temp = 0; while(i<lenString && str[i] >= ’0’
&& str[i] <= ’9’) { temp = (temp * 10) + (str[i]-’0’); i++; } i--; hash[letter

11 12

You might also like