codeforces B. Xenia and Ringroad 解题报告
题目链接:http://codeforces.com/problemset/problem/339/B
题目理解不难,这句是解题的关键 In order to complete the i-th task, she needs to be in the house number ai and complete all tasks with numbers less than i 。从样例1的提示,可以知道,如果a[i] > a[i+1],则需要继续顺时针走下去,直到到达n,接着重新从1开始数,直到a[i+1]。
这里要注意的是题目中 2 ≤ n ≤ 105, 1 ≤ m ≤ 105 , 暗示了我们数据是比较大的,为什么呢?如果输入的序列是递减的,那么每一次转换到下一个数都要经过一次循环,最坏情况是10^5 * 10^5,即10^10 = 10 000 000 000,所以需要要用到64位整数[-2^63, 2^63),即即-9223372036854775808~9223372036854775807。常规的32位整数只能够处理40亿以下的数。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std; const int maxn = + ;
typedef long long LL; // 关键 int main()
{
int i, j, m, n;
LL a[maxn];
LL cnt, cnt1; // cnt用来统计时间的总和,cnt1用来统计已经完成的任务
while (cin >> n >> m)
{
for (i = ; i < m; i++)
{
scanf("%I64d", &a[i]);
}
for (cnt = -, cnt1 = i = , j = ; i < m; i++)
{
while (a[i] >= j)
{
j++;
cnt++;
}
cnt1++;
if (a[i+] < a[i] && i+ < m)
{
j--; // 退出while过程中,j加多了一次,需要减回来再统计
while (j != n)
{
j++; // 必须要达到n之后才能继续从1开始数到a[i+1]
cnt++;
}
j = ; // j到达n之后要继续开始新一轮的顺时针计数(从1开始)
}
if (cnt1 == m) // 所有任务已经完成则退出
break;
}
printf("%I64d\n", cnt);
}
return ;
}
优化后的代码(以时间换空间的,上面那个是30ms,800kB,GNU C++提交,下面的是156ms,0kB,MS C++提交)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std; int main()
{
_int64 cnt;
int t1, t2, i, k, m, n;
while (cin >> n >> m)
{
t2 = ;
k = ;
for (cnt = i = ; i < m; i++)
{
cin >> t1;
if (t1 < t2)
k = n;
cnt += k + t1 - t2;
k = ;
t2 = t1;
}
printf("%I64d\n", cnt);
}
return ;
}
codeforces B. Xenia and Ringroad 解题报告的更多相关文章
- codeforces B. Xenia and Spies 解题报告
题目链接:http://codeforces.com/problemset/problem/342/B 题目意思:有n个spy,编号从1-n,从左到右排列.现在的任务是,spy s要把信息传递到spy ...
- codeforces A. Xenia and Divisors 解题报告
题目链接:http://codeforces.com/problemset/problem/342/A 题目意思:给出n个数,找出n/3个组且每组有3个数,这三个数必须要符合两个条件:1.a < ...
- Codeforces Educational Round 92 赛后解题报告(A-G)
Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...
- codeforces 476C.Dreamoon and Sums 解题报告
题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...
- Codeforces Round #382 (Div. 2) 解题报告
CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...
- codeforces 507B. Amr and Pins 解题报告
题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...
- codeforces 500B.New Year Permutation 解题报告
题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...
- codeforces 462C Appleman and Toastman 解题报告
题目链接:http://codeforces.com/problemset/problem/461/A 题目意思:给出一群由 n 个数组成的集合你,依次循环执行两种操作: (1)每次Toastman得 ...
- codeforces 460A Vasya and Socks 解题报告
题目链接:http://codeforces.com/problemset/problem/460/A 题目意思:有一个人有 n 对袜子,每天早上会穿一对,然后当天的晚上就会扔掉,不过他会在 m 的倍 ...
随机推荐
- CAS做单点登陆(SSO)——集成BIEE 11g
BIEE 11G和CAS集成零代码编写,只需配置. 更改BIEE analytics应用的web.xml 将analytics.war解包(使用7-zip或者Win-rar就可以),然后修改WEB-I ...
- 14.Android之Layout布局学习
Android布局主要有5种,接下来学习总结下. 1) 最常见的线性布局 LinearLayout 线性布局是Android布局中最简单的布局,也是最常用,最实用的布局. android:orient ...
- android 开发问题:java.lang.ClassCastException
java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl cannot be cast to javax.net.ssl ...
- android.net.wifi的简单使用方法
获取Wifi的控制类WifiManager. WifiManager wm=(WifiManager)getSystemService(Context.WIFI_SERVICE); 接下来可以对w ...
- Struts2拦截器Interceptor执行顺序理解
invocation.invoke()方法是拦截器框架的实现核心,通过确定invocation.invoke()方法执行位置,来实现Action执行前后处理操作,在invocation.invoke( ...
- 使用C#进行图片转换格式,缩放,自动旋转,保留exif(转载)
这几天心血来潮做了一个批量图片缩放,转换格式,并且可以根据exif的信息旋转图片,校正exif信息后保存的小程序.根据配置文件 指定需要的功能. 1 2 3 4 5 6 7 8 9 10 11 12 ...
- 关于markdown需要澄清的一些误解
关于markdown需要澄清的误解: 首先, 最大的一个误解就是 转义! markdown不支持对小于号 < 的转义, 如 \<"pre">, 这时候仍然会认为是 ...
- JQuery元素获取
前言:这是本类别博文JQuery即用即查开篇. 因为查手册太麻烦,而且有时候需要深入命令所在详细页面才能了解此命令的具体作用是什么. 写这几篇文章就是为了,工作遇到问题时,一看这几篇文章就可以查到哪个 ...
- 导出Excel之Epplus使用教程2(样式设置)
导出Excel之Epplus使用教程1(基本介绍) 导出Excel之Epplus使用教程2(样式设置) 导出Excel之Epplus使用教程3(图表设置) 导出Excel之Epplus使用教程4(其他 ...
- php设置cookie,在js中如何获取
在php中设置cookie. $email="abc@163.com"; setcookie("y_email",$email,time()+3600,&quo ...