1181 B

题意

一个高精整数,要把它从中间割开分成两部分,每一部分不能为空也不能有前导零,问如何才能使得两部分的和最小。

Examples

input
7
1234567
output
1801
input
3
101
output
11

打高精好点烦的
就均分成两半,再判一判前导零就好了。

1181 C

题意

旗帜的定义:
这些是旗帜:


这些不是旗帜:





现在给你一个英文字母矩阵,问有多少个子矩形是旗帜。 \((n,m\le 1000)\)

Examples

input
4 3
aaa
bbb
ccb
ddd
output
6
input
6 1
a
a
b
b
c
c
output
1
input
4 3
aca
ccc
bbb
aaa
output
8

弄一个双端队列模拟即可。
细节较多。

Code

#include<bits/stdc++.h>
using namespace std;
typedef pair<char,int> P;
const int maxn=1003,INF=1050000000;
char s[maxn];
int n,m;
long long ans;
deque<P> a[maxn];
bool valid(const deque<P> &q){return q.size()==3&&q[0].second>=q[1].second&&q[1].second==q[2].second;
}
bool equal(const deque<P> &q1,const deque<P> &q2){if(q2.size()!=3)return 0;for(int i=0;i<=2;i++)if(q1[i].first!=q2[i].first)return 0;return q1[1].second==q2[1].second&&q1[2].second==q2[2].second;
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%s",s+1);for(int j=1;j<=m;j++){if(a[j].size()>=1&&a[j].back().first==s[j])a[j].back().second++;else a[j].push_back(P(s[j],1));while(a[j].size()>=2&&a[j].back().second>a[j][a[j].size()-2].second)a[j].pop_front();if(a[j].size()>=4)a[j].pop_front();}for(int l=1,r=1;r<=m;l=r){for(;l<=m&&!valid(a[l]);l++);for(r=l;r<=m&&valid(a[r])&&equal(a[l],a[r]);r++);ans+=(long long)(r-l)*(r-l+1)/2;}}printf("%lld\n",ans);return 0;
}

1181 D

题意

有 \(m\) 个城市,每年举办比赛。在最先的 \(n\) 年中比赛的举办地是已知的,后来制定了规则,每年以每个城市之前举办次数为第一关键字,以每个城市的编号为第二关键字,选择最小的城市举办比赛。现在有 \(q\) 个询问,每次询问第 \(x_i\) 年由哪个城市举办。 \((1\le n,m,q\le 5*10^5,x_i\le 10^{18})\)

Examples

input
6 4 10
3 1 1 1 2 2
7
8
9
10
11
12
13
14
15
16
output
4
3
4
2
3
4
1
2
3
4
input
4 5 4
4 4 5 1
15
9
13
6
output
5
3
3
3

模拟发现,经过 \(O(n^2)\) 年,举办城市必定会变成 \(1,2,\dots ,m\) 的顺序。
因此,在临界值之后的询问很容易得出结果。
在临界值之前的询问呢?
考虑将每个城市按上述两个关键字排序,然后对于每个第一关键字相等的区间设它们为 \([l_i...r_i](r_i+1=l_{i+1},l_1=1)\) 我们发现举办城市的顺序就是:

  • \(1\) 到 \(r_1\) 轮流,进行 \(cnt[l_2]-cnt[1]\) 遍;
  • \(\dots\)
  • \(1\) 到 \(r_{i+1}\) 轮流,进行 \(cnt[l_{i+2}]-cnt[l_{i+1}]\) 遍;
  • \(\dots\)
  • \(1\) 到 \(r_{k-1}\) 轮流,进行 \(cnt[l_k]-cnt[l_{k-1}]\) 遍;
  • \(1\) 到 \(m\) 轮流,进行 \(∞\) 遍(这是临界值之后)。

每次相当于一轮轮完之后把 \([1,r_i]\) 与 \([l_{i+1},r_{i+1}]\) 合并。
\(n^2\) 归并显然是不行的,因此我们用一种数据结构来实现每个城市的名次查询。

Code

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
typedef pair<long long,int> QQ;
const int maxn=500003,INF=1050000000;
P a[maxn];
QQ q[maxn];
int n,m,Q,ans[maxn],t[maxn<<2];
int mod(long long x,int y){return x%y==0?y:x%y;}
void change(int p,int l,int r,int pos){if(l==r){t[p]++;return;}int mid=(l+r)>>1;if(pos<=mid)change(p<<1,l,mid,pos);else change(p<<1|1,mid+1,r,pos);t[p]=t[p<<1]+t[p<<1|1];
}
int kth(int p,int l,int r,int rnk){if(l==r)return l;int mid=(l+r)>>1;if(rnk<=t[p<<1])return kth(p<<1,l,mid,rnk);else return kth(p<<1|1,mid+1,r,rnk-t[p<<1]);
}
int main(){scanf("%d%d%d",&n,&m,&Q);for(int i=1;i<=n;i++){int x;scanf("%d",&x);a[x].first++;}for(int i=1;i<=m;i++)a[i].second=i;sort(a+1,a+m+1);for(int i=1;i<=Q;i++)scanf("%lld",&q[i].first),q[i].second=i;sort(q+1,q+Q+1);int l,r,pos;long long now=n,nxt;for(l=1,r=1,pos=1;;l=r){for(;r<=m&&a[r].first==a[l].first;r++)change(1,1,m,a[r].second);if(r>m)break;nxt=now+(long long)(a[r].first-a[l].first)*(r-1);for(;pos<=Q&&q[pos].first<=nxt;pos++){ans[q[pos].second]=kth(1,1,m,mod(q[pos].first-now,r-1));}now=nxt;}for(;pos<=Q;pos++){ans[q[pos].second]=mod(q[pos].first-now,m);}for(int i=1;i<=Q;i++)printf("%d\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/BlogOfchc1234567890/p/11051532.html

Codeforces 1181相关推荐

  1. codeforces 1181C

    原题http://codeforces.com/problemset/problem/1181/C C. Flag time limit per test 2 seconds memory limit ...

  2. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  3. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  4. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  5. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

  6. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...

    题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...

  7. CodeForces 595A

    题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...

  8. codeforces A. Jeff and Digits 解题报告

    题目链接:http://codeforces.com/problemset/problem/352/A 题目意思:给定一个只有0或5组成的序列,你要重新编排这个序列(当然你可以不取尽这些数字),使得这 ...

  9. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

最新文章

  1. 2021.09 电子学会 - 软件编程(图形化)试题讲解
  2. .NET基础示例系列之十六:制做进程监视器
  3. 360桌面计算机,360桌面管理软件
  4. 【转】C# Stream篇(—) -- Stream基类
  5. 【POJ - 2486】Apple Tree (树形背包,dp)
  6. [转载] Python中的switch语句的替代品
  7. Written English-书面-现在完成时
  8. 浅谈V8引擎中的垃圾回收机制
  9. PostgreSQL的几种分布式架构对比
  10. 获取当前目录下所有文件的文件名
  11. CCF CSP201903-2二十四点
  12. PHP composer
  13. 洛可可集团董事长贾伟:未来组织的进化
  14. Pandas:时间序列数据基本操作和分组
  15. linux 重启ftp的命令,linux开启ftp命令
  16. 最全面的挤出模具知识汇总!收藏收藏吧!!!
  17. 1055 集体照 (25 分)(详解)
  18. html中图片自动循环滚动代码,实现长图片自动循环滚动效果
  19. 如何在CSDN写笔记_写笔记前的插件安装
  20. python3 生成器的send_Python3基础 yield send 获得生成器后,需要先启动一次

热门文章

  1. 全局异常处理_全局异常处理
  2. win10虚拟机怎么连接服务器,Win10系统虚拟机尝试连接到服务器出错怎么办
  3. 从mysql读取数据保存成excel_小程序读取excel表格数据,并存储到云数据库
  4. 使用jquery调试ajax接口
  5. java插入时间 mssql_JAVA操作数据库Datetime数据
  6. pandas库基础学习
  7. bootstraptable 汇总_bootstrap-table事件汇总
  8. 系统通知并发问题_玩转Java高并发?请先说明下并发下的惊群效应
  9. web文件 群晖_【原创】群晖NAS 上部署静态网站
  10. lucky前面加a还是an_微信昵称前加个“A” 不是微商就是销售?看看这个“A”的含义!...