Valentine's Day Round 1001.Ferries Wheel(hdu 5174)解题报告

news/2024/11/10 0:33:50 标签: php, runtime, c/c++

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5174

题目意思:给出 n 个人坐的缆车值,假设有 k 个缆车,缆车值 A[i] 需要满足:
A[i1]<A[i]<A[i+1](1<i<K)。现在要求的是,有多少人满足,(他坐的缆车的值 + 他左边缆车的值) % INT_MAX == 他右边缆车的值。

  首先好感谢出题者的样例三,否则真的会坑下不少人。即同一部缆车可以坐多个人。由于缆车的值是唯一的,所以可以通过排序先排出缆车的位置。求出满足条件的缆车的值,然后统计有多少人坐了即可。

  一开始做的时候很不细心,出现runtime error,因为开了个vis[]数组来统计每部缆车坐的人数了,数据量是2147483647,很明显是错的。

  然后就是考虑题目中的输出 -1(只有一部缆车) 情况遗漏了,n == 1只是其中一种情况!因为缆车的值是独一无二的,那么排序后如果val[1] == val[n] 就能覆盖缆车只有一部的所有情况了。

  最后就是没有用 long long (或 __int 64) 保存数据了。因为缆车的值最大是 2147483647,如果它左边的值(要相加嘛)是 1 以上,就会爆 int 了。

  细心细心细心。。。细心。。。。。。

  (1)简单版(学人写的)

  

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 const int maxn = 100 + 5;
 8 const __int64 I_MAX = 2147483647;
 9 __int64 a[maxn];
10 
11 int main()
12 {
13     #ifndef ONLINE_JUDGE
14         freopen("in.txt", "r", stdin);
15     #endif // ONLINE_JUDGE
16 
17     int n, cas = 0;
18     while (scanf("%d", &n) != EOF) {
19         for (int i = 1; i <= n; i++)
20             scanf("%I64d", &a[i]);
21         sort(a+1, a+1+n);
22         if (a[1] == a[n]) {     // 只有一部缆车的情况
23             printf("Case #%d: -1\n", ++cas);
24             continue;      // 不要也行
25         }
26         else {
27             int ans = 0;
28             a[0] = a[n], a[n+1] = a[1];
29 
30             for (int i = 1; i <= n; i++) {
31                 int l = i, r = i;
32                 while (a[i] == a[l] && l >= 0)  // 定位左边的缆车值
33                     l--;
34                 while (a[i] == a[r] && r <= n+1)  // 定位右边的缆车值
35                     r++;
36                 if ((a[i]+a[l]) % I_MAX == a[r])
37                     ans++;
38             }
39             printf("Case #%d: %d\n", ++cas, ans);
40         }
41     }
42     return 0;
43 }

 

     (2)错了10次以上终于改正确的= =

  

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 const int maxn = 100 + 5;
 9 const __int64 NUM = 2147483647;
10 
11 int main()
12 {
13     #ifndef ONLINE_JUDGE
14         freopen("in.txt", "r", stdin);
15     #endif // ONLINE_JUDGE
16     int n, cas = 0;
17     while (scanf("%d", &n) != EOF) {
18         __int64 val[maxn];
19         __int64 tmp[maxn];
20         for (int i = 0; i < n; i++) {
21             scanf("%I64d", &tmp[i]);
22         }
23         sort(tmp, tmp+n);
24         if (tmp[0] == tmp[n-1])
25             printf("Case #%d: -1\n", ++cas);
26         else {
27             int c = 0;
28             for (int i = 0; i < n; i++) {
29                 while (tmp[i] == tmp[i+1] && i < n)
30                     i++;
31                 val[c++] = tmp[i];
32             }
33 
34             int ans = 0;
35             if ((val[0] + val[c-1]) % NUM == val[1]) {
36                 for (int j = 0; j < n; j++) {
37                     if (tmp[j] == val[0])
38                         ans++;
39                 }
40             }
41             if ((val[c-1] + val[c-2]) % NUM == val[0] && val[c-1] != val[0]) {
42                 for (int j = n-1; j >= 0; j--) {
43                     if (tmp[j] == val[c-1])
44                         ans++;
45                 }
46             }
47             for (int i = 1; i < c-1; i++) {
48                 if ((val[i] + val[i-1]) % NUM == val[i+1] && val[i] != val[0] && val[i] != val[c-1]) {
49                     for (int j = i; j < n; j++) {
50                         if (tmp[j] == val[i])
51                             ans++;
52                     }
53                 }
54             }
55             printf("Case #%d: %d\n", ++cas, ans);
56         }
57     }
58     return 0;
59 }
View Code

 

转载于:https://www.cnblogs.com/windysai/p/4293601.html


http://www.niftyadmin.cn/n/1117768.html

相关文章

mysql+php

1.Mysql安装 * yum install gcc-c ncurses-devel -y ##解决依赖性 * tar zxf mysql-boost-5.7.17.tar.gz ##解压文件 * tar zxf mysql-boost-5.7.17.tar.gz ##安装CMAKE工具 * useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin -u 800 nginx ##添加用户 * cm…

jQuery ajax的traditional参数的作用

为什么80%的码农都做不了架构师&#xff1f;>>> 一般的&#xff0c;可能有些人在一个参数有多个值的情况下&#xff0c;可能以某个字符分隔的形式传递&#xff0c;比如页面上有多个checkbox&#xff1a; $.ajax{url:"xxxx",data:{p: "123,456,789&…

关于target=_new和_blank的区别!

为了弄清楚这个问题我们来看三段代码产生的结果&#xff1a; code1&#xff1a; <html><head><title> new和blank的区别 </title></head><frameset cols"30%, *">     <!-- 分别调用target为new和blank的两段代码 --&g…

windows安装mysql初始密码_Windows下安装mysql 8+ 及修改初始密码

1、解压压缩包&#xff0c;放置到任意目录注意目录最好是英文这是我的目录&#xff1a;D:\Python\mysql-8.0.12-winx64\2. 初始化用管理员权限打开CMD或者Windows Powershell使用命令&#xff1a;mysqld --initialize --console使用CMD命令操作如下&#xff1a;C:\Windows\syst…

linux 查看Linux本机IP

2019独角兽企业重金招聘Python工程师标准>>> 1.命令&#xff1a;ifconfig 2.命令&#xff1a;ip addr 参考链接&#xff1a;https://blog.csdn.net/u014346344/article/details/81126144 转载于:https://my.oschina.net/qimhkaiyuan/blog/3007317

MYSQL5 表列更名删除等操作测试(更新中...)

-- -------------初始化部分--------------- 删除测试表DROP TABLE IF EXISTS TTT;-- 创建测试表CREATE TABLE TTT(A BIGINT,B BIGINT,C BIGINT,D BIGINT);-- 插入测试数据INSERT INTO TTT VALUES(1,1,1,1),(2,2,2,2);COMMIT;-- -------------列操作部分---------------- 删除列…

WCF也可以做聊天程序

先看一个截图。 上面的图&#xff0c;各位乍一看&#xff0c;可能会觉得是用Socket编写的聊天程序。告诉你吧&#xff0c;这玩意儿不是用Socket实现&#xff0c;呵呵&#xff0c;当然它的底层肯定与Socket有一定关系&#xff0c;我只说我的代码没有用到socket而已。 那么&#…

ai python 自动_Python - AI自动抠图

一、简介抠图是用PS&#xff1f;用魔棒和快速选择工具&#xff1f;遇到复杂背景怎么办&#xff1f;最近发现一个神奇的工具——Remove Image Background它是基于Python、Ruby和深度学习技术开发&#xff0c;通过强大的AI人工智能算法实现自动识别出前景主体与背景图&#xff0c…