【题目链接】:http://codeforces.com/contest/731/problem/D

【题意】



给你n个象形文;

每个象形文由l[i]个数字组成;

你可以把所有的组成象形文的数字同时增加1;

超过c的变成1;

然后让你用这个操作使得n个象形文按照字典序升序

排;

问你最小的操作次数;

【题解】



首先;

得先让这n个字符串,相邻的两个的字符串都符合字典序

即s[i]<=s[i+1];

所以;

可以分别处理出使得这n-1个相邻的关系成立的操作步数;

只考虑第一个不同的位置就好;

因为前面不管怎么改变都是一样的;

比如n-1个相邻关系种的

s[3]和s[4]

如果

s[3][i]和s[4][i]是第一个不同的位置;



则如果s[3][i]< s[4][i]

那么0..c-s4[i]和c-s[3][i]+1..c这个两个区间内的数对应的操作次数;

都能使s[3][i]< s[4][i]成立;



如果s[3][i]>s[4][i]

则c-s[3][i]+1..c-s[4][i]这个区间范围内的数对应的操作次数,都能使得s[3][i]< s[4][i]成立;

求这n-1个区间的交就好;

如果有一个区间能够使得这n-1个关系都满足则输出最小的就好;



【Number Of WA】



0



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 5e5+100;
const int M = 1e6+100; int n,c,l[N],sum[M],sum1[M];
vector <int> G[N]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf not use
//init??????
cin >> n >> c;
rep1(i,1,n)
{
cin >> l[i];
int x;
rep1(j,1,l[i])
{
cin >> x;
G[i].pb(x);
}
}
rep1(i,1,n-1)
{
int len = min(l[i],l[i+1]);
int j;
for ( j = 0;j <= len-1;j++)
if (G[i][j]!=G[i+1][j])
break;
if (j==len)
{
if (l[i]>l[i+1])
return cout <<-1<<endl,0;
sum[0]++;
continue;
}
if (G[i][j]<G[i+1][j])
{
sum[0]++;
//s[i][j]<s[i+1][j]
sum[c-G[i+1][j]+1]--;
sum[c-G[i][j]+1]++;
}
else
{
//s[i][j]>s[i+1][j]
sum[c-G[i][j]+1]++;
sum[c-G[i+1][j]+1]--;
}
}
rep1(i,1,c) sum[i] += sum[i-1];
rep1(i,0,c)
if (sum[i]==n-1)
{
cout <<i<<endl;
return 0;
}
cout <<-1<<endl;
return 0;
}

最新文章

  1. ubuntu安装cacti错误
  2. viewpager 与 radiogroup 联动时的位置问题
  3. Download the WDK, WinDbg, and associated tools
  4. Markdown 是什么?
  5. ng-model 指令
  6. 剑指Offer14 逆序链表
  7. (转载)EhLib 在 Delphi 7 下的安装方法
  8. 阿里云+wordpress
  9. javascript中字符串常用方法总结
  10. JDK源码分析(9) LinkedHashMap
  11. C++模板、.vimrc和一些Linux配置
  12. SAP MM tables
  13. iOS 实现单个页面支持横竖屏,其他页面只能竖屏
  14. 【Dubbo 源码解析】04_Dubbo 服务注册&amp;暴露
  15. js发送get 、post请求的方法简介
  16. 解决mount.nfs: access denied by server while mounting错误
  17. learning ddr mode register MR2
  18. Revit api 创建族并加载到当前项目
  19. JFinal Web开发学习(五)注册界面和后端验证
  20. 转 ImageMagick及PHP的imagick扩展的安装及配置

热门文章

  1. DotNetBar.Bar菜单的使用
  2. bzoj4956: [Wf2017]Secret Chamber at Mount Rushmore
  3. php中全局变量global和超全局变量$GLOBALS
  4. 高效管理 Elasticsearch 中基于时间的索引——本质是在利用滚动模式做数据的冷热分离,热索引可以用ssd
  5. hdoj--1829--A Bug&#39;s Life(带权并查集)
  6. [源码管理] Windows下搭建SVN服务器
  7. hihoCoder-1830 2018亚洲区预选赛北京赛站网络赛 C.Cheat 模拟
  8. WPF MVVM 关闭窗体
  9. 修改数组数据头和尾push()、pop()和unshift()、shift()
  10. ts中类的继承