Codeforces Round #261 (Div. 2)小记

2024-09-09 08:08
文章标签 codeforces round div 261 小记

本文主要是介绍Codeforces Round #261 (Div. 2)小记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。

#define  X  first
#define  Y  secondvector<pair<int , int> > a ;int can(pair<int , int> c){return  -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000  ;
}int main(){int  x1 , x2 , y1 ,y2   , d  , ok ;pair<int , int >s , t ;while(cin>>x1>>y1>>x2>>y2){ok = 1 ;a.clear() ;a.push_back( make_pair(x1 , y1)) ;a.push_back( make_pair(x2 , y2)) ;sort(a.begin()  , a.end()) ;if(a[0].X == a[1].X && a[0].Y != a[1].Y){d = a[1].Y - a[0].Y ;s.X = a[0].X + d ;t.X = a[1].X + d ;s.Y = a[0].Y ;t.Y = a[1].Y ;if(! can(s) || ! can(t)){s.X = a[0].X + d ;t.X = a[1].X + d ;s.Y = a[0].Y ;t.Y = a[1].Y ;if(! can(s) || ! can(t)) ok = 0 ;}}else if(a[0].X != a[1].X && a[0].Y == a[1].Y){d = a[1].X - a[0].X ;s.Y = a[0].Y + d ;t.Y = a[1].Y + d ;s.X = a[0].X ;t.X = a[1].X ;if(! can(s) || ! can(t)){s.Y = a[0].Y - d ;t.Y = a[1].Y - d ;s.X = a[0].X ;t.X = a[1].X ;if(! can(s) || ! can(t)) ok = 0 ;}}else{if(abs(a[1].Y - a[0].Y) != abs(a[1].X - a[0].X)) ok = 0 ;s.X = a[0].X ;s.Y = a[1].Y ;t.X = a[1].X ;t.Y = a[0].Y ;if(! can(s) || ! can(t)) ok = 0 ;}if(ok) printf("%d %d %d %d\n" ,s.X ,s.Y , t.X , t.Y) ;else   puts("-1")  ;}return 0;
}

B XX

C

组合数学,打印全排列

typedef   long  long  LL ;LL  n , k , d ;int  ok(){LL t = 1 ;for(int i = 1; i <= d ; i++){t *= k ;if(t >= n) return 1 ;}return 0 ;
}int  c[1008][1008] ;
int  selc[1008] ;
int  over ;void  dfs(int id , int &col){if(over)  return  ;if(col == n+1){ over = 1 ; return ;} ;if(id == d+1){for(int i = 1 ; i <= d ; i++)  c[i][col] = selc[i] ;col++ ;return  ;}for(int i = 1 ; i <= min(k , n ) ; i++){selc[id] = i ;dfs(id+1 , col) ;}
}int main(){while(cin>>n>>k>>d){if(ok()){over = 0 ;int col = 1 ;dfs(1 , col) ;for(int i = 1 ; i <= d ; i++){printf("%d" , c[i][1]) ;for(int j = 2 ; j <= n ; j++) printf(" %d" , c[i][j]) ;puts("") ;}}else puts("-1") ;}return 0;
}


D

 转换成树状数组来做。

typedef   long  long  LL ;const  int  maxn = 1000008 ;int  g[maxn] ;
int  n ;
inline int lowbit(int x){return x & (-x) ;
}void into(int id , int d){for(int i = id ; i <= n ; i += lowbit(i)) g[i] += d ;
}int  sum(int id){int t = 0 ;for(int i = id ; i >= 1 ; i -= lowbit(i)) t += g[i] ;return t ;
}int  a[maxn] , c[maxn]  ;
int  cnt[maxn]  ;int main(){int  i  , m  ;while(cin>>n){for(i = 1 ; i <= n ; i++){scanf("%d" , &a[i]) ;c[i-1] = a[i] ;}sort(c , c+n) ;m = unique(c , c+n) - c ;for(i = 1 ; i <= n ; i++)a[i] = upper_bound(c , c+m , a[i]) - c ;memset(cnt , 0 , sizeof(cnt)) ;for(i = 1 ; i <= n ; i++) c[i] = ++cnt[a[i]] ;memset(g , 0 , sizeof(g)) ;memset(cnt , 0 , sizeof(cnt)) ;LL  ans = 0 ;for(i = n ; i >= 1 ; i--){ans += sum(c[i] - 1) ;into(++cnt[a[i]] , 1) ;}cout<< ans << endl ;}return 0;
}

E 贪心,按w排序 每次更新

const  int  maxn = 300008 ;int  n , m ;struct  state{int u , v , w ;friend bool operator < (const state &a , const state &b){return a.w < b.w ;}
}g[maxn] ;int  d[maxn] , pd[maxn] ;int  main(){int i , j ;while(cin>>n>>m){for(i = 0 ; i < m ; i++)scanf("%d%d%d",&g[i].u , &g[i].v , &g[i].w) ;sort(g , g+m) ;memset(d , 0 , sizeof(d)) ;memset(pd , 0 , sizeof(pd)) ;for(i = 0 ; i < m ; i++){j = i ;while(j < m && g[i].w == g[j].w) j++ ;for(int k = i ; k < j ; k++)d[g[k].v]= max(d[g[k].v] , pd[g[k].u]+1) ;for(int k = i ; k < j ; k++)pd[g[k].v]= d[g[k].v] ;i = j - 1 ;}int t = *max_element(d+1 , d+1+n) ;cout<< t << endl ;}return  0 ;
}


这篇关于Codeforces Round #261 (Div. 2)小记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150617

相关文章

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

Codeforces 482B 线段树

求是否存在这样的n个数; m次操作,每次操作就是三个数 l ,r,val          a[l] & a[l+1] &......&a[r] = val 就是区间l---r上的与的值为val 。 也就是意味着区间[L , R] 每个数要执行 | val 操作  最后判断  a[l] & a[l+1] &......&a[r] 是否= val import ja

CSS实现DIV三角形

本文内容收集来自网络 #triangle-up {width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 100px solid red;} #triangle-down {width: 0;height: 0;bor

创建一个大的DIV,里面的包含两个DIV是可以自由移动

创建一个大的DIV,里面的包含两个DIV是可以自由移动 <body>         <div style="position: relative; background:#DDF8CF;line-height: 50px"> <div style="text-align: center; width: 100%;padding-top: 0px;"><h3>定&nbsp;位&nbsp;