FOJ有奖月赛-2016年8月(daxia专场之过四题方有奖)

6/7

这里简单写个题解,由于源代码无法查看,所以过了的题目的代码就不贴了。。。。

题A Problem A Daxia & Wzc‘s problem

题意:略

题解:这个东西显然推公式,最后推得的一个组合数学的公式与第一项和公差有关(具体公式隔太久不记得了,囧)。然后注意到这个m只有一千,虽然这个i很大,但是C(a,b)的运算次数显然是由a和b较小的一个决定,所以可以优化到算一个组合数的复杂度是min(m,i)。

题B Problem B Daxia & Yayamao‘s problem

题意:略

题解:这是一个斜率相关问题,比赛的时候没有做出来,然而赛后的也推了超久的(人太渣没办法),我是参考NOI2007的一道题:cash来学的里面的斜率相关问题。这里简单地解释一下:求的是y = a * x + b,(所有的(a,b)已知),变形一下得:b = -x * a + y,这是一条直线,(a,b)是已知的点,给定-x为斜率,求一个最大的斜率,画图可以发现所有有效的点形成一个“上凸包”,只有凸包上的点才是“候选点”,也就是给定一个斜率,我们可以找到最接近的斜率上面的一个点就是答案。这个过程有两种做法,第一种是二分,第二种是三分。二分是二分斜率,然后查找最接近的大于-x的斜率,三分是三分点,把每个点带入对于每个x一定是形成二次函数的样子。两者都可以,要说优劣,只能说三分比较好些,直接求一个凸包,然后三分一下就可以了,二分可能还有误差问题。

 1 /*zhen hao*/
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <queue>
 6 #include <vector>
 7 #include <string>
 8 #include <stack>
 9 #include <set>
10 #include <map>
11 #include <iostream>
12 #include <algorithm>
13 using namespace std;
14
15 #define lson l, m, rt*2
16 #define rson m + 1, r, rt*2+1
17 #define xx first
18 #define yy second
19
20 typedef pair<int,int> pii;
21 typedef long long LL;
22 typedef unsigned long long ULL;
23
24 const int N = 1e5 + 10, inf = 1 << 30;
25
26 struct Point {
27   LL a, b;
28   Point(){}
29   Point(LL a, LL b) : a(a), b(b) {}
30   bool operator < (const Point& o) const {
31     return a < o.a || (a == o.a && b < o.b);
32   }
33   Point operator - (const Point& o) const {
34     return Point(a - o.a, b - o.b);
35   }
36   Point operator + (const Point& o) const {
37     return Point(a + o.a, b + o.b);
38   }
39 } P[N], ch[N];
40
41 LL cross(Point A, Point B) {
42   return A.a * B.b - A.b * B.a;
43 }
44
45 int convex(Point *P, int n, Point *ch) {
46   sort(P, P + n);
47   int m = 0;
48   for (int i = 0; i < n; i++) {
49     while (m > 1 && cross(P[i] - ch[m - 2], ch[m - 1] - ch[m - 2]) <= 0) m--;
50     ch[m++] = P[i];
51   }
52   return m;
53 }
54
55 struct Node {
56   int x, id;
57   Node(int x=0, int id=0) : x(x), id(id) {}
58 } line[N];
59
60 LL get(Point A, Point B) {
61   double x = 1.0 * (A.b - B.b) / (A.a - B.a);
62   return (LL)ceil(x);
63 }
64
65 bool cmp(Node A, Node B) {
66   return A.x < B.x;
67 }
68
69 int main() {
70 //  freopen("case.in", "r", stdin);
71   int n, m;
72   while (~scanf("%d%d", &n, &m)) {
73     for (int i = 0; i < n; i++) scanf("%I64d%I64d", &P[i].a, &P[i].b);
74     int nn = convex(P, n, ch);
75 //    for (int i = 0; i < nn; i++) cout << ch[i].a << ‘ ‘ << ch[i].b << endl;
76     int cnt = 0;
77     for (int i = nn - 1; i >= 0; i--) {
78       if (i == nn - 1) line[cnt++] = Node(-inf, i);
79       else line[cnt++] = Node(get(ch[i], ch[i + 1]), i);
80     }
81 //    sort(line, line + nn, cmp);
82     for (int i = 0; i < nn; i++) {
83 //      cout << line[i].x << ‘ ‘ << line[i].id << endl;
84     }
85     for (int i = 0; i < m; i++) {
86       LL x;
87       scanf("%I64d", &x);
88       int p = upper_bound(line, line + nn, Node(-x, 0), cmp) - line - 1;
89 //      cout << line[p].id << endl;
90       printf("%I64d\n", ch[line[p].id].a * x + ch[line[p].id].b);
91     }
92   }
93   return 0;
94 }

代码君(二分)

/*zhen hao*/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <vector>
#include <string>
#include <stack>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
using namespace std;

#define lson l, m, rt*2
#define rson m + 1, r, rt*2+1
#define xx first
#define yy second

typedef pair<int,int> pii;
typedef long long LL;
typedef unsigned long long ULL;

const int N = 1e5 + 10, inf = 1 << 30;

struct Point {
  LL a, b;
  Point(){}
  Point(LL a, LL b) : a(a), b(b) {}
  bool operator < (const Point& o) const {
    return a < o.a || (a == o.a && b < o.b);
  }
  Point operator - (const Point& o) const {
    return Point(a - o.a, b - o.b);
  }
  Point operator + (const Point& o) const {
    return Point(a + o.a, b + o.b);
  }
} P[N], ch[N];

LL cross(Point A, Point B) {
  return A.a * B.b - A.b * B.a;
}

int convex(Point *P, int n, Point *ch) {
  sort(P, P + n);
  int m = 0;
  for (int i = 0; i < n; i++) {
    while (m > 1 && cross(P[i] - ch[m - 2], ch[m - 1] - ch[m - 2]) <= 0) m--;
    ch[m++] = P[i];
  }
  return m;
}

struct Node {
  int x, id;
  Node(int x=0, int id=0) : x(x), id(id) {}
} line[N];

LL get(Point A, Point B) {
  double x = 1.0 * (A.b - B.b) / (A.a - B.a);
  return (LL)ceil(x);
}

bool cmp(Node A, Node B) {
  return A.x < B.x;
}

LL cal(Point A, LL x) {
  return A.a * x + A.b;
}

int main() {
//  freopen("case.in", "r", stdin);
  int n, m;
  while (~scanf("%d%d", &n, &m)) {
    for (int i = 0; i < n; i++) scanf("%I64d%I64d", &P[i].a, &P[i].b);
    int nn = convex(P, n, ch);
    for (int i = 0; i < m; i++) {
      LL x;
      scanf("%I64d", &x);
      int L = 0, R = nn - 1;
      while (R - L > 2) {
        int m1 = L + (R - L) / 3;
        int m2 = R - (R - L) / 3;
        if (cal(ch[m1], x) < cal(ch[m2], x)) L = m1; else R = m2;
//        cout << L << ‘ ‘ << R << endl;
      }
      LL ans = -(1LL << 60);
      for (int i = L; i <= R; i++) ans = max(ans, cal(ch[i], x));
      printf("%I64d\n", ans);
    }
  }
  return 0;
}

代码君(三分)

题C Problem C Daxia & Suneast‘s problem

题意:略

题解:首先要知道这个SG的规律,白书原题,也可以自己暴力打表发现。然后就是用线段树维护每个点的SG值,区间查询,单点更新即可,实际上是一道水题╮(╯▽╰)╭。

题D Problem D Daxia like YuGiOh

题意:略

题解:没做出来,也没看题,感觉有点难就搁到了现在。。。。

题E Problem E Daxia like acute triangle

题意:略

题解:对于一个圆,先从0度到360度按照逆时针编个号,然后排完序之后对于每个点考虑半圆,从半圆上任意选两个点,方案数为C(n,2),然后一直做到最后一个点就是钝角和直角三角形的数量,最后用C(n,3)减去即可。是道水题,然后比赛的时候脑抽了,整个队在纠结题意。。。。。。

 1 /*zhen hao*/
 2 #include <cstdio>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6
 7 #define lson l, m, rt*2
 8 #define rson m + 1, r, rt*2+1
 9 #define xx first
10 #define yy second
11
12 typedef pair<int,int> pii;
13 typedef long long ll;
14 typedef unsigned long long ull;
15
16 char s[10];
17 int n, r;
18
19 int get_id(int x, int y) {
20   if (x == r || (x > 0 && y > 0)) return r - x;
21   else if (x <= 0 && y > 0) return r - x;
22   else if (x < 0 && y <= 0) return 2 * r + r + x;
23   else return 3 * r + x;
24 }
25
26 const int N = 4e4 + 10;
27
28 int id[N];
29
30 int main() {
31 //  freopen("case.in", "r", stdin);
32   while (~scanf("%d%d", &n, &r)) {
33     for (int i = 0; i < n; i++) {
34       int x, y;
35       scanf("%d%s", &x, s);
36       if (x == r || x == -r) y = 0;
37       else if (s[1] == ‘>‘) y = 1;
38       else y = -1;
39       id[i] = get_id(x, y);
40 //      cout << id[i] << endl;
41     }
42     sort(id, id + n);
43     for (int i = 0; i < n; i++) id[i + n] = id[i] + 4 * r;
44     ll res = 1LL * n * (n - 1) * (n - 2) / 6;
45     for (int i = 0; i < n; i++) {
46       int p = lower_bound(id, id + n * 2, id[i] + 2 * r) - id;
47       if (id[p] == id[i] + 2 * r) p++;
48       ll len = p - i - 1;
49       res -= len * (len - 1) / 2;
50     }
51     cout << res << endl;
52   }
53   return 0;
54 }

代码君

题F Problem F Daxia like uber

题意:略

题解:好像是最短路dij+枚举,队友秒的。

题G Problem G Daxia want to buy house

题意:略

题解:模拟题,读懂题意之后好像要利用指数的特点来优化误差,我语文不行,应该做不出这道题,又是队友秒了。

时间: 2024-09-28 18:37:32

FOJ有奖月赛-2016年8月(daxia专场之过四题方有奖)的相关文章

FOJ有奖月赛-2016年8月 Problem A Daxia &amp; Wzc&#39;s problem(找规律)

Problem A Daxia & Wzc's problem Accept: 42    Submit: 228Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description Daxia在2016年5月期间去瑞士度蜜月,顺便拜访了Wzc,Wzc给他出了一个问题: Wzc给Daxia等差数列A(0),告诉Daxia首项a和公差d; 首先让Daxia求出数列A(0)前n项和,得到新数列A(1); 然后让Daxia求出数列A(

FOJ有奖月赛-2016年4月(校赛热身赛)

A.ABCDEFG 题意:给出一个由abcdefg(大/小)组成的字符串,计算写这些字符串要多少笔. 题解:先打一个前七个大小写字母笔画的表,之后用这个求和即可. 代码: 1 /*A*/ 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 6 int a[7]={1,1,1,2,1,2,1}; 7 int A[7]={3,2,1,2,3,3,1}; 8 9 int main() 10 { 11 int T;

FOJ有奖月赛-2015年11月 Problem B 函数求解

Problem B 函数求解 Accept: 171    Submit: 540Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description 给出n,求f(n). Input 第一行一个正整数T,表示数据组数. 接下来T行,每行一个正整数n. T<=20,n<=2015000000. Output 对于每组数据,输出一行f(n). Sample Input 2 1 20150001 Sample Output 20

2016年3月14日作业第四章:项目管理一般知识

1.  核心知识域有哪些.保障域有哪些?伴随域有哪些?过程域有哪些? 核心知识域:整体管理.范围管理.进度管理.成本管理.质量管理和信息安全管理等 保障域:人力资源管理.合同管理.采购管理.风险管理.信息(文档)与配置管理.知识产权管理.法律法规标准规范和职业道德规范等 伴随域:变更管理和沟通管理等 过程域:科研与立项.启动.计划.实施.监控和收尾等,其中的监控过程则可能发生在项目生命周期的任一阶段. 2.  有效的项目管理要求项目管理团队,至少要使用哪六个方面知识? 项目管理知识体系(5大功能

2016年10月15日 算法竞赛刷题所得

1.开灯问题 a[i] = !a[i] 赋相反的值: 注意输入输出: 2.错位输入 常量字符串的使用getchar 3.回文词 常量字符串申明 isalpha()函数的使用 运用两个变量决定字符串在二维字符数组中的位置 4猜数字游戏提示 表示无限循环与while(1)相似,需要在中途通过break跳出 5.最小字典序问题 运用循环比较最优字典序

2016年9月全球桌面系统份额:Win7为39.38%,Win10达

10月1日消息,数据调研机构StatCounter目前给出了2016年9月份全球茗彩娱乐桌面系统市场份额统计排名,数据显示,Win10的增长势头依然良好,在市场份额上和目前排名第一的Win7还有15%左右的差距. 虽然微软在7月29日停止了Windows10免费更新服务,虽然此前微软在2018财年创造10亿Win10用户的目标看起来已经无法实现,但Win10推出后的整体势头依然有目共睹.根据StatCounter的数据,截止2016年9月,Win10已经占据24.46%的市场份额,而Win7为3

转帖-[教程] Win7精简教程(简易中度)2016年8月-0day

[教程] Win7精简教程(简易中度)2016年8月 0day 发表于 2016-8-19 16:08:41  https://www.itsk.com/thread-370260-1-1.html 本帖最后由 0day 于 2016-8-23 20:15 编辑 1.资源准备1.1 Win7 SP1 专业版原版(版本不限)1.2 Win7 SP1 便捷更新包2016年4月 本帖隐藏的内容 KB3020369 32位:https://download.microsoft.com/download/

【记录】2016年5月

[5月的记录帖] 开篇明义: 一直拖沓太多,自己也有一种得过且过的心思,养了些坏习惯,总是容易自我感动,而后便纵情娱乐,生活不止娱乐. 没有干货,憋了半天也憋不出东西来,一点点的记录下. 时间安排 学习 锻炼  娱乐 ===============================<第一周>=================================== ==============================第1天===================================

软考高项学员:2016年4月20日作业

软考高项学员:2016年4月20日作业 一.战略管理1.企业战略的特点有哪些?2.企业战略决策的特点有哪些?3.战略管理分为哪三步?(记)4.组织的使包括组织哲学和组织宗旨,请写下2者的定义.5.要确定一个组织的宗旨,首先做什么?(记)6.什么是长期目标,什么是短期目标?7.战略制订包括哪五个步骤?(记)8.战略分析中的外部分析有哪些?9.宏观趋势分析包括哪些?请列出名称,并简述之.10.行业分析包括哪些?11.五力模型认为,行业中的竞争包括哪五种基本的竞争力量?(记)(可以参看图20.1五力模