void solve(){ for( int i = 0 ; i < n ; i ++ ) if( c[ i ] == '<' ){ if( c[ i + 1 ] == '/' ){ if( c[ i + 2 ] == 'U' ) i += 4; else i += 6; v.pop_back(); }else if( c[ i + 1 ] == 'U' ) v.PB( 1 ) , i += 3; else v.PB( 2 ) , i += 5; }else{ if( v.size() && v.back() == 1 ) putchar( toC( c[ i ] ) ); else if( v.size() && v.back() == 2 ) putchar( toS( c[ i ] ) ); else putchar( c[ i ] ); } puts( "" ); }
int main() { while (~scanf("%d", &n)) { map<int, int> idx; ed.clear(); int m = 0; for (int i = 0; i < n; i++) { int a, b, r, p; scanf("%d%d%d%d", &a, &b, &r, &p); if (idx.find(a) == idx.end()) { idx[a] = ++m; } if (idx.find(b) == idx.end()) { idx[b] = ++m; } ed.PB(Edge(idx[a], idx[b], r, p, i + 1)); } sort(ed.begin(), ed.end()); for (int i = 1; i <= m; i++) fa[i] = i; LL res = 0; for (int i = 0; i < n; i++) { int pa = find(ed[i].a), pb = find(ed[i].b); if (pa != pb) { res += ed[i].p; fa[pa] = pb; } } cout << res << endl; for (int i = ed.size() - 1; i >= 0; i--) { printf("%d%c", ed[i].id, i == 0 ? '\n' : ' '); } } return 0; }
void dp(){ int i,j,k; for(i=0;i<cnt;i++) for(j=0;j<=n/2;j++) knap[i][j].tf=0; knap[0][0].tf=1; knap[0][0].pre=0; for(i=1;i<cnt;i++){ for(j=n/2;j>=0;j--){ for(k=0;k<2;k++) if(j>=L[i].bg[k].size()&&knap[i-1][j-L[i].bg[k].size()].tf){ knap[i][j].tf=1; knap[i][j].pre=j-L[i].bg[k].size(); knap[i][j].op=k; } } } int now; for(i=n/2;i>=0;i--) if(knap[cnt-1][i].tf){ now=i; break; } for(i=cnt-1;i>=0;i--){ int OP=knap[i][now].op; for(j=0;j<L[i].bg[OP].size();j++) A.PB(L[i].bg[OP][j]); now=knap[i][now].pre; } }
void calc() { pll pos = {0, 0}; ll R = 2000000; while(R > 0) { // cout<<"R = "<<R<<" @ "<<pos<<endl; if(R > 3) R = ceill(sqrtl(R * R / 2.l)); else R--; ll dR = max(R, 1LL); // cout<<"dR "<<dR<<endl; for(int i=0; i<4; i++) { pll newpos = trim(pos + dir[i] * dR); int res = query(newpos, R); // cout<<pos<<" -> "<<newpos<<" : "<<res<<endl; if(res > 0) { pos = newpos; break; } } } assert(query(pos, 0) > 0); vfound.PB(pos); }
void traverse(int i,map<int,int >vec,map<int,bool>row,map<int,bool>col) { if(vec.size()==8) { bool bt = true; for(int i =0; i<mymap.size(); i++) { if(mymap[i]==vec) bt =false; } if(bt) mymap.PB(vec); } else { if(i+1>7) i =0; else i++; for(int j =0; j<8; j++) { if(row.find(i) ==row.end() && col.find(j) ==col.end() && check(vec,i,j)) { map<int,int>temp = vec; map<int,bool>t =row; map<int,bool>f= col; t[i] =true; f[j] = true; temp[j] =i; traverse(i,temp,t,f); } } } }
int main(){ ios_base::sync_with_stdio(false); cin >> n >> m; for(int i = 1; i <= n; i++){ cin >> c[i]; Min = min(Min, c[i]); } while(m--){ int fi, se; cin >> fi >> se; if(c[fi] != c[se]) e.PB(MP(min(c[fi], c[se]), max(c[fi], c[se]))); } sort(e.begin(), e.end()); e.resize(unique(e.begin(), e.end()) - e.begin()); for(int i = 0; i < e.size(); i++) a[e[i].L]++, a[e[i].R]++; int Max = -1, ans; for(int i = 1; i <= 1e5; i++) if(a[i] > Max) Max = a[i], ans = i; if(Max == 0) cout << Min << endl; else cout << ans << endl; return 0; }
int main() { int g; scanf("%d", &g); for(int i=0; i<g; i++) { int a,b; scanf("%d %d", &a, &b); v.PB(MP(a,b)); } int m; scanf("%d", &m); for(int i=0; i<m; i++) { int x,y,r; scanf("%d %d %d", &x, &y, &r); for(int xx=max(0,x-r); xx<min(MX,x+r+1); xx++) { for(int yy=max(0,y-r); yy<min(MX,y+r+1); yy++) { if((xx-x)*(xx-x) + (yy-y)*(yy-y) <= r*r) A[xx][yy]=true; } } } int ans=0; for(int i=0; i<v.size(); i++) { if(!A[v[i].F][v[i].S]) ans++; } printf("%d\n", ans); return 0; }
int main(){ ios_base::sync_with_stdio(false); cin.tie(0); memset(v, -1, sizeof v); memset(vc, -1, sizeof vc); cin >> n >> m; while(m--){ int fi, se, th; cin >> fi >> se >> th; v[fi] = th; vc[se] = fi; } for(int i = 1; i <= n; i++){ if(v[i] != -1) continue; int zarf = 1e9; int x = i; while(vc[x] != -1){ x = vc[x]; zarf = min(zarf, v[x]); } if(x != i) ans.PB(MP(MP(x, i), zarf)); } sort(ans.begin(), ans.end()); cout << ans.size() << '\n'; for(auto x : ans) cout << x.L.L << ' ' << x.L.R << ' ' << x.R << '\n'; return 0; }
void recurse(int val[8],bool arr[8],int t) { if(t==8) { vector<int>x(8); for(int i =0;i<8;i++) x[i ] =val[i]; if(search(x)) { //cout<<endl; mymap.PB(x); } } else { for(int j =0;j<8;j++) { if(arr[j] == false && check(val,t,j)) { val[t] = j; arr[j] =true; recurse(val,arr,t+1); arr[j] = false; } } } }
int main() { //freopen("test.in", "r", stdin); scanf("%d", &n); if(n == 2) { puts("2"); return 0; } for(int i = 0; i < n; i++) scanf("%d", &a[i]); for(int i = 0; i < n; i++) s.PB(a[i]); sort(s.BG, s.ED); int size = unique(s.BG, s.ED) - s.BG; for(int i = size; i < s.SZ; i++) s.erase(s.BG + i); for(int i = 0; i < s.SZ; i++) f[i].clear(); for(int i = 0; i < n; i++) f[lower_bound(s.BG, s.BG + size, a[i]) - s.BG].PB(i); for(int i = 0; i < size; i++) ans = max(ans, (int)f[i].SZ); for(int i = 0; i < size; i++) for(int j = 0; j < size; j++) if(i != j) { ans = max(ans, cal(f[i], f[j])); } cout << ans << endl; }
int bfs(bool visited[], queue<int> &que, int r, int c, int graph[]){ int temp; int count = 0; int flag = 0; queue <int > output; int n = r * c; visited[que.front()] = 1; while(!que.empty()){ temp = que.front(); if(temp == n-1) flag = 1; //cout << "Front: " << temp << endl; if (temp % c && !visited[temp -1]){ visited[temp - 1] = 1;que.push(temp - 1); } if(temp % c != c-1 && !visited[temp + 1]){ visited[temp + 1] = 1;que.push(temp + 1); } if (temp / c && !visited[temp - c]){ visited[temp - c] = 1;que.push(temp - c); } if(temp / c != r-1 && !visited[temp + c]){ visited[temp + c] = 1;que.push(temp + c); } que.pop(); // output.push(temp); count ++; } if(flag) mark = count; else conn_components.PB(count); return flag; }
int main(int argc, char const *argv[]) { int Test; scanf("%d", &Test); while (Test--) { store.clear(); E = 0; memset(last, -1, sizeof(last)); scanf("%d%d", &n, &m); //for (int i = 0; i < n; i++) adj[i].clear(); for (int i = 0; i < m; i++) { int a, b, c; scanf("%d%d%d", &a, &b, &c); addEdge(a, b, c); addEdge(b, a, c); } scanf("%d", &s); for (int i = 0; i < s; i++) { int x; scanf("%d", &x); store.PB(x); dijkstra(i); } dijkstra(s); solve(); } return 0; }
void input(void){ LL inp; cin >> inp; while(inp) num.PB(inp % 10), inp /= 10; return; }
int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> h >> w >> n; for(int i = 0; i < n; i++) { int fi, se; cin >> fi >> se; bl.PB(MP(fi, se)); } sort(bl.begin(), bl.end()); if(bl[0] == MP(1LL, 1LL) or bl.back() == MP(h, w)) { cout << 0 << endl; return 0; } fact[0] = 1; revfact[0] = 1; for(LL i = 1; i < 250000; i++) { fact[i] = (fact[i - 1] * i) % Mod; revfact[i] = ((get(fact[i], Mod).L % Mod) + Mod) % Mod; } for(int i = bl.size() - 1; i >= 0; i--) { dp[i] = C(h - bl[i].L + w - bl[i].R, h - bl[i].L); for(int j = i + 1; j < bl.size(); j++) dp[i] = (dp[i] - ((C(bl[j].L + bl[j].R - bl[i].L - bl[i].R, bl[j].L - bl[i].L) * dp[j]) % Mod)) % Mod; if(dp[i] < 0) dp[i] += Mod; } LL ans = C(h + w - 2, h - 1); for(int i = 0; i < bl.size(); i++) ans = (ans - ((C(bl[i].L + bl[i].R - 2, bl[i].L - 1) * dp[i]) % Mod)) % Mod; cout << (ans + Mod) % Mod << endl; return 0; }
int main() { IOS; cin >> N >> M; for (int i=0, u, v; i<M; i++) { cin >> u >> v; E[v].PB(u); deg[u]++; } set<int> pq; for (int i=1; i<=N; i++) { if (!deg[i]) pq.insert(i); } while (!pq.empty()) { int u = *pq.rbegin(); ans.PB(u); pq.erase(u); for (auto v : E[u]) { deg[v]--; if (!deg[v]) pq.insert(v); } } reverse(ALL(ans)); for (int i=0; i<N; i++) { cout << ans[i] << " \n"[i==N-1]; } return 0; }
int main() { int i, x; cin >> N; for (i = 0; i < N; ++i) { cin >> x; A.PB(x); } sort(A.begin(), A.end(), [] (const int a, const int b) { return a > b; }); for (i = 0; i < N; ++i) { if (i) { cout << " "; } cout << A[i]; } cout << "\n"; return 0; }
int main() { int loop; cin>>limit>>dest>>loop; while(limit!=0 && dest!=0 && loop!=0) { int a,b,c; //cout<<limit<<dest<<loop<<endl; for(int i =0;i<loop;i++) { cin>>a>>b>>c; //cout<<a<<b<<c<<endl; arr.PB(make_pair(make_pair(a,b),c)); //cin>>a>>b>>c; } max_cost =0; int w =0,r =0; vector< pair< pair<int,int>,int> >temp; vector<bool>vec; for(int i =0;i<loop;i++) vec.PB(false); recurse(r,temp,vec); cout<<max_cost<<endl; max_cost =0; arr.erase(arr.begin(),arr.end()); cin>>limit>>dest>>loop; } return 0; }
int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> k; for(int i = 0; i < n; i++){ cin >> a[i]; all.PB(a[i]); } sort(all.begin(), all.end()); all.resize(unique(all.begin(), all.end()) - all.begin()); fen_left.n = fen_right.n = sz(all); for(int i = 0; i < n; i++) indexof[i] = lower_bound(all.begin(), all.end(), a[i]) - all.begin() + 1; LL p = 0, q = n; while(p < n - 1 and can_add(indexof[p], 0)) p++; p--; while(p >= 0){ while(q - 1 > p and can_add(indexof[q - 1], 1)) q--; //cout << p << ' ' << q << ' ' << inv << ' '; ans += n - q; int idx = indexof[p]; fen_left.add(idx, -1); inv -= calc_invs(idx); //cout << calc_invs(idx) << endl; p--; } cout << ans << endl; return 0; }
void solve() { int n; while (~scanf ("%d",&n)) { L.clear(); int i; for (i=1; i<=n; i++) { int x; scanf ("%d",&x); L.PB (x); } sort (L.begin(),L.end()); int ans,l=0,r=n/2; while (l<=r) { if (r-l<=1) { if (check (r)) ans=r; else ans=l; break; } int mid= (l+r) >>1; if (check (mid)) l=mid; else r=mid; } printf ("%d\n",n-ans); } }
void make(int x){ if(number[x] != 0) ans.PB(number[x]); if(x == 0) return; make(par[x]); }
int main() { freopen( "pprime.in", "r", stdin ); freopen( "pprime.out", "w", stdout ); int i,j,p,q; for ( i=1; i<10000; i++ ) { char ss[6]; sprintf( ss,"%d",i ); string s=ss; string d=s; reverse( d.OP,d.ED ); string a=s+d; string b=s.substr( 0,s.SZ-1 )+d; istringstream ain( a ),bin( b ); int A,B; ain>>A; bin>>B; if ( isprime( A ) )G.PB( A ); if ( isprime( B ) )G.PB( B ); } sort( G.OP,G.ED ); while ( cin>>p>>q ) { int l=lower_bound( G.OP,G.ED,p )-G.OP; for ( i=l; G[i]<=q&&i<G.SZ; i++ )printf( "%d\n",G[i] ); } return 0; }
void call() { if( result.size() == n ) { printf("%d",result[0]); for( int i=1; i<n; i++ ) printf(" %d",result[i]); printf("\n"); return; } for( int i=0; i<n; i++ ) { int p=arr[i]; p=chk(p); if( taken[i] == 0 && p) { taken[i]=1; result.PB(arr[i]); call(); return; taken[i]=0; result.pop_back(); } } }
int main() { IOS; cin >> N >> M; for (int i=0; i<M; i++) { int a, b; cin >> a >> b; ip.PB({a, b}); } sort(ALL(ip)); int lst = 0, led = 0; int ans = 0; for (int i=0; i<M; i++) { int s, e; tie(s, e) = ip[i]; if (s > led) { ans += (led - lst) * 2; ans += s - lst; lst = s; led = e; } else { led = max(led, e); } } ans += (led - lst) * 2; ans += N + 1 - lst; cout << ans << endl; return 0; }
int main() { //freopen("","r",stdin); //freopen("","w",stdout); int i,j,n,k; int CA=0; while ( ~scanf( "%d%d",&n,&k ) ) { if ( !n&&!k )break; L.clear(); for ( i=1; i<=n; i++ ) { scanf( "%s",s ); int len=strlen( s ); L.PB( len ); } sort( L.begin(),L.end() ); int flag=0; for ( i=0; i<n; i+=k ) if ( L[i+k-1]-L[i]>4 )flag=1; if ( CA )printf( "\n" ); CA++; printf( "Case %d: ",CA ); if ( flag )printf( "no\n" ); else printf( "yes\n" ); } return 0; }
void work(int t){ sum=0; for (int k=0;k<6;k++) { now.clear(); for (int i=1;i<=8;i++) for (int j=1;j<=8;j++) { char x=s[17-i*2][j*4-2]; if (t==-1&&G[k]==x||t==1&&x==tolower(G[k])) now.PB(MP(i,j)); } if (t==-1) sort(now.begin(),now.end(),cmp1); else sort(now.begin(),now.end(),cmp2); for (int i=0;i<now.size();i++) { sum++; ans[sum]=""; if (k!=5) ans[sum].PB(G[k]); ans[sum].PB('a'+now[i].B-1); ans[sum].PB('0'+now[i].A); } } if (t==-1) cout << "White: " ; else cout << "Black: " ; for (int i=1;i<sum;i++) cout << ans[i] << ',' ; cout << ans[sum] << endl ; }
int main(){ scanf("%d%d", &n, &q); for(int i = 1; i <= n; i++) scanf("%d", col + i); for(int i = 1; i < n; i++){ int fi, se; scanf("%d%d", &fi, &se); adj[fi].PB(se); adj[se].PB(fi); } dfs(1); for(int i = 0; i < q; i++){ int fi, se; scanf("%d%d", &fi, &se); quer.PB(MP(MP(fi, se), i)); } sort(quer.begin(), quer.end(), cmp); add(0, n); int st = 0, en = -1; for(int i = 0; i < q; i++){ int l = sttime[quer[i].L.L], r = fitime[quer[i].L.L] - 1; while(st > l) mo_add(a[--st], +1); while(en < r) mo_add(a[++en], +1); while(st < l) mo_add(a[st++], -1); while(en > r) mo_add(a[en--], -1); ans[quer[i].R] = get(quer[i].L.R); } for(int i = 0; i < q; i++) printf("%d\n", ans[i]); return 0; }
int main() { int i,j,k; int n; while(~scanf("%d",&n)&&n) { for(i=0; i<n; i++)scanf("%d%d",&z[i].AA,&z[i].BB); sort(z,z+n); n=unique(z,z+n)-z; L.clear(); int ans=0; for(i=0; i<n; i++) for(j=i+1; j<n; j++)if(z[i]!=z[j]){ pair<LL,LL>x=FFF(z[i],z[j]); for(k=j+1; k<n; k++)if(z[k]!=z[i]&&z[k]!=z[j]){ pair<LL,LL>y=FFF(z[i],z[k]); if(y!=x){ foo.read(z[i],z[j],z[k]); L.PB(foo); } } } for(i=0;i<L.SZ;i++){ int now=0; for(j=0;j<L.SZ;j++) if(L[j]==L[i])now++; cmax(ans,now); } printf("%d\n",ans); } return 0; }
int main() { int n =0; cin>>n; string s; getline(cin,s); while(n>0) { getline(cin,s); char x; string s; getline(cin,s); for(int i =0;i<s.size();i++) { if(s[i]!=' ') arr.PB(s[i]); } sort(arr.begin(),arr.end()); for(int i =0;i<arr.size();i++) { mymap[arr[i]]= i; } while(cin>>s) { graph[mymap[s[0]]][mymap[s[2]]] = 1; } topo_sort(); mymap.erase(mymap.begin(),mymap.end()); arr.erase(arr.begin(),arr.end()); n--; } }
int main() { scanf("%d",&n); v1.resize(n); v2.resize(n); for(int i=0;i<n;i++) { scanf("%lf",&var); v.PB(var); } double g,h,fg,fh,a=-20000,b=20000; int iteration=0; while(iteration<200) { g=(2*a+b)/3; h=(a+2*b)/3; fg=solve(g); fh=solve(h); //printf("%d %.7lf %.7lf %.7lf %.7lf\n",iteration,fg,fh,a,b); if(fg+eps<fh) b=h; else a=g; iteration++; } printf("%.10lf %.10lf\n",solve(a),a); return 0; }
int main(){ n=rit(),m=rit(),q=rit(); for(int i=0;i<m;i++){ int a=rit(),b=rit(); if(a==b){ self[a]=1; continue; } if(a>b)swap(a,b); h.PB(MP(a,b)); // h.PB(MP(b,a)); } sort(h.begin(),h.end()); for(int i=0;i<q;i++){ int a=rit(),b=rit(); if(a==b){ if(self[a]){ printf("yes\n"); } else{ printf("no\n"); } continue; } if(a>b)swap(a,b); if(binary_search(h.begin(),h.end(),MP(a,b))){ printf("yes\n"); } else{ printf("no\n"); } } }