Example #1
0
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( "" );
}
Example #2
0
File: P462.cpp Project: zjsxzy/algo
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;
}
Example #3
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;
	}
}
Example #4
0
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);
}
Example #5
0
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);
            }
        }
    }
}
Example #6
0
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;
}
Example #8
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;
}
Example #9
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;
				}
			}
	}
}
Example #10
0
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;
}
Example #11
0
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;
}
Example #12
0
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;
}
Example #13
0
void input(void){
	LL inp;
	cin >> inp;
	while(inp)
		num.PB(inp % 10), inp /= 10;
	return;
}
Example #14
0
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;
}
Example #15
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;
}
Example #17
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;
}
Example #18
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;
}
Example #19
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);
	}
}
Example #20
0
void make(int x){
	if(number[x] != 0)
		ans.PB(number[x]);
	if(x == 0)
		return;
	make(par[x]);
}
Example #21
0
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();
        }
    }
}
Example #23
0
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;
}
Example #24
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;
}
Example #25
0
File: H.cpp Project: mrain/acm
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 ;
}
Example #26
0
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;
}
Example #27
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--;
	}
}
Example #29
0
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;
}
Example #30
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");
        }
    }
}