区间的交并(80-th Level Archeology,cf 731D)
2016-10-17 16:31
441 查看
为区间的交并苦恼了很久,看了别人代码才过。
要求n个字符串变成字典序,而不是每一位都非降。
一开始处理方法就错了,问题在于没有好好思考自己的解法是否能正确完成题目要求。
代码
要求n个字符串变成字典序,而不是每一位都非降。
一开始处理方法就错了,问题在于没有好好思考自己的解法是否能正确完成题目要求。
代码
#include<bits/stdc++.h> #define maxn 500010 #define maxc 1000010 using namespace std; int n,c; vector<int>vec[maxn]; int qj[maxc]; void get() { scanf("%d %d",&n,&c); int temp; for(int i=1;i<=n;i++) { scanf("%d",&temp); vec[i].push_back(temp); for(int j=1;j<=vec[i][0];j++) { scanf("%d",&temp); vec[i].push_back(temp); } } } void add(int l,int r) { qj[l]++; qj[r+1]--; } int pre() { for(int i=1;i<n;i++) { bool ok=false; int MIN=min(vec[i][0],vec[i+1][0]); for(int j=1;j<=MIN;j++) { int x=vec[i][j]; int y=vec[i+1][j]; if(x!=y) { if(x<y) add(c-y+1,c-x); else if(x>y) { add(0,c-x); add(c-y+1,c-1); } ok=true; break; } } if(!ok&&vec[i][0]>vec[i+1][0]) return -1; } int temp=0; for(int i=0;i<c;i++) { temp+=qj[i]; if(!temp) return i; } return -1; } int main() { get(); printf("%d\n",pre()); return 0; }
相关文章推荐
- codeforces 731 D 80-th Level Archeology (差分+线段扫描)
- CodeForces 731 D.80-th Level Archeology(水~)
- Codeforces Round #376 (Div. 2) D. 80-th Level Archeology
- CodeForces 731D 80-th Level Archeology
- 【codeforces 731D】80-th Level Archeology
- 【codeforces 731D】【差分+线段扫描 思维题】80-th Level Archeology【给你n个word,现在要使得word按字典序排列,随便操作多少次,每次可以使每个word+1】
- Codeforces Round #376 (Div. 2) D. 80-th Level Archeology(乱搞)
- 【题解】Codeforces731D 80-th Level Archeology
- Codeforces731D 80-th Level Archeology
- Codeforces Round #376 (Div. 2) D. 80-th Level Archeology —— 差分法 + 线段扫描法
- CodeForces - 731D 80-th Level Archeology
- CF 558D(Guess Your Way Out! II-set解决区间问题)
- HDU 4632 CF 245H 区间DP(回文)
- CF 245H. Queries for Number of Palindromes 区间dp
- CF Mike and Feet (求连续区间内长度为i的最小值)单调栈
- POJ 2104 K-th Number&&HDU 2665 Kth number划分树 求区间第k大 裸题
- cf 46-d (模拟区间覆盖)
- CF 279C Ladder(区间问题)
- CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)
- CF 319E Ping-Pong 区间的并查集合并