2019/7/19 CF808(div2)

A.Lucky Year

对于只存在一个不为0的位数,那么先把位数求出来,若只有一个,那么是1~9,任意+1都满足,所以为1,若不是1,那么就是最高位+1 ,后面全是0,减去原来的数字。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int y,count=0,x,d;
 6     cin>>y;
 7     d=y;
 8     while(y!=0)
 9     {
10         count++;
11         if((y/10)==0)
12         x=y;
13         y=y/10;
14     }
15     if(count==1)
16     cout<<"1";
17     else
18     {
19       // cout<<x<<count<<endl;
20         x=(x+1)*pow(10,count-1);
21        // cout<<x<<endl;
22         cout<<x-d;
23     }
24     return 0;
25 }

A

B. Average Sleep Time

输入一个n,k,求k长度为前缀的前缀和,直接暴力模拟。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll n,k;
    cin>>n>>k;
    ll a[n];
    for(ll i=0;i<n;i++)   cin>>a[i];
    ll ans = 0,sum=0;
    for(ll i=0;i<k;i++)   ans += a[i];   sum = ans;
    for(ll i=1;i<n-k+1;i++)
    {
        ans -= a[i-1] ;
        ans += a[i+k-1] ;
        sum +=ans;
    }
    double an = sum/(double)(n-k+1);
   printf("%.12lf\n", an);
}

B

C.Tea Party

题目意思为,有n个人,每个人有a[i]的杯子,有一个为w多的茶水,使每个杯子的水大于等于一般(体积为整数),不存在体积较大的者的水比体积较小者的水少,求方案。

所以,贪心,刚开始都给一半,但是要向上取整,如果w不够直接不存在,如果w有剩余,那么就要根据体积的多少降序直接放入(坑点在于因为是整数,所以存在奇偶,又因为sort是

稳定的排序,所以要以前的体积来排序。)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 #define fast ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
 5 #define ll long long
 6 #define mp make_pair
 7 #define ss second
 8 #define ff first
 9 #define pb push_back
10 #define PDI pair<double, int>
11 #define PII pair<int, int>
12
13 int n,w;
14 PII a[300];
15
16 int f[300];
17
18 bool cmp(PII a, PII b)
19 {
20     return a.first > b.first;
21 }
22 int main()
23 {
24 //    fast;
25
26     cin >> n >> w;
27     int x;
28     for (int i = 1; i <= n; i ++)
29     {
30         cin >> x;
31         a[i].first = x;
32
33         f[i] = (x + 1) / 2;
34         w -= (x + 1) / 2;
35         a[i].second = i;
36     }
37     if(w < 0)
38     {
39         puts("-1");
40         return 0;
41     }
42     sort(a + 1, a + n + 1, cmp);
43     for (int i = 1; i <= n; i ++)
44     {
45         a[i].first = a[i].first - f[a[i].second];
46     }
47
48     for (int i = 1; i <= n; i ++)
49     {
50         if(w >= a[i].first)
51         {
52             w -= a[i].first;
53             f[a[i].second] += a[i].first;
54         }
55         else
56         {
57             f[a[i].second] += w;
58             w = 0;
59             break;
60
61         }
62     }
63
64     for (int i = 1; i <= n; i ++)
65     printf("%d ", f[i]);
66
67 }

C

D.  Array Division

给定一组序列,让你只能把其中一个任意移动位置,然后分成俩个数列,和相等。

第一种方法,那么我们就维护前缀和,如果和为奇数,没有方案。如果是偶数,对与前k的数列来说,它只能删除或得到

某个数,那么我们维护前缀和,如果小于sum/2,那么就在后面找一下,有没有这个少的部分的数字。如果等于,那么成功。如果大于,只能说明加了一个多余的数字,要删除它,那么它

就在我加过的数字里面,用map来储存数字和个数。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 #define fast ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
 5 #define ll long long
 6 #define mp make_pair
 7 #define ss second
 8 #define ff first
 9 #define pb push_back
10
11 typedef pair<int, int> P;
12
13 const int N = 1e6 + 10;
14 int a[N];
15 ll sum[N];
16
17 unordered_map<ll, int> first, second;
18
19 int main()
20 {
21     int n;
22     cin >> n;
23     for (int i = 1; i <= n; i ++)
24         {
25         cin >> a[i];
26         sum[i] = sum[i - 1] + a[i];
27          }
28     if(sum[n] % 2 == 1)
29     {
30         puts("NO");
31         return 0;
32     }
33     ll t = sum[n] / 2;
34
35     first[a[1]] = 1;
36     for (int i = 2; i <= n ; i++)
37     {
38         second[a[i]] ++;
39     }
40     ll res = 0;
41     for (int i = 1; i <= n; i ++)
42     {
43         first[a[i]] ++;
44         second[a[i]] --;
45
46         res += a[i];
47         if(res == t)
48         {
49             puts("YES");
50             return 0;
51         }
52         else if(res < t)
53         {
54             if(second[t - res] > 0)
55             {
56                 puts("YES");
57                 return 0;
58             }
59         }
60         else
61         {
62             if(first[res - t] > 0)
63             {
64                 puts("YES");
65                 return 0;
66             }
67         }
68     }
69
70     puts("NO");
71
72     return 0;
73 }

D1

第二种方法,对于任意一个数字a[i]来说,只有三种结果加入前缀,加入后缀,不动。加入前缀,等于要在前缀中找到sum/2-a[i]的位置,然后插进去。 加入后缀,等于要在后缀中找到sum/2 -a[i],因为

我们是用前缀和来维护后缀和,那么对于前缀来说就是寻找sum/2 + a[i]。然后二分。

 1  #include <bits/stdc++.h>
 2  using namespace std;
 3 typedef long long ll;
 4  const int N=100010;
 5 ll s[N],a[N],sum;
 6  int n;
 7 bool find(int l,int r,ll x)
 8  {
 9      while(l<=r)
10     {
11          int mid=(l+r)/2;
12          if(s[mid]==x)
13              return 1;
14         if(s[mid]<x)
15              l=mid+1;
16          else r=mid-1;
17      }
18    return 0;
19  }
20  int main()
21  {
22     scanf("%d",&n);
23      for(int i=1;i<=n;i++)
24      {
25          scanf("%lld",&a[i]);
26          sum+=a[i];
27          s[i]=s[i-1]+a[i];//求前缀和
28      }
29      if(sum&1)
30      {
31          cout<<"NO"<<endl;
32          return 0;
33      }
34      sum/=2;
35     for(int i=1;i<=n;i++)
36      {
37          if(find(i+1,n,sum+a[i])||find(1,i-1,sum-a[i]))
38         {
39              cout<<"YES"<<endl;
40              return 0;
41          }
42      }
43      cout<<"NO"<<endl;
44      return 0;
45  }

D2

E.Selling Souvenirs

一个01背包问题,然后暴力不行,然后就不会了。

F.Card Game

不会。

G.Anthem of Berland

不会。

原文地址:https://www.cnblogs.com/xwdzuishuai/p/11215378.html

时间: 2024-11-05 18:44:44

2019/7/19 CF808(div2)的相关文章

mybatis使用要点(2019.5.19)

接口入参 只有一个参数,叫啥都没问题 有两个参数以上,需使用@Param,否则名字依次为0.1.2和param1.param2.param3 一般用#,防sql注入:偶尔用$,比如需要动态表名等 接口返回结果 有resultMap和resultType resultMap需要定义一个resultMap元素,然后在元素里面把下划线转为驼峰 resultType一般对应一个实体类,又或者HashMap(不是map),要写类的全路径,这样就需要在select里把下划线转驼峰 但下划线转驼峰最好用map

cf386(div2)大一狗ACM之路

#cf386(div2)总结#前两题很顺利的做了出来, c题扔了, D题wrong了5发才A掉.A题签到题, 但是想多了, 代码写的有点长了. 找被整除最小值*7.B题 读题读了一会, 读完了就有思路了, 1A. 字符串问题, 从后往前两个两个的放到新的字符串里, 一个从最左, 一个从最右, 模拟指针扫着放, 最后特判会不会扫到一起.C题跳了没看, 最后做完了D题回来看了一眼没什么思路 日后再说.D题, 恩.. 两个多小时都用在这题上面了, 20分钟的时候做完了B之后就一直再啃D题, 暴力判断啊

2019北京人工智能展(CHITEC)

2019北京人工智能展(CHITEC)前言人工智能的迅速发展将深刻改变人类社会生活.改变世界.为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,按照党中央.×××部署要求,制定本规划. 随着中国人工智能技术的快速发展以及和商业应用的快速推广,人工智能才插上了腾飞的翅膀,已成为各国之间的竞争新赛道.2017年7月,×××印发了<新一代人工智能发展规划>,从国家层面制定了未来10多年人工智能的战略部署. 据中商产业研究院发布的<2018-20

开荒日-2019/06/19

2019/06/19,毕业两年之际,个人原因来到了台州,这个对程序员来说不是很友好的地方,技术提升遇到了阻碍,想要从项目中学习东西但是收获甚微,还好现在的工作时间比较宽裕,让我有不少可以自由支配的时间,也算是到了工作的舒适区吧,但是此刻心里还是挺着急的,压力来源于对技术能力的渴望,却少有可以锻炼的机会.所以决定自己动手丰衣足食,打算开发一个自己的小产品,考虑了几天,打算搭建一个基础版本的OA平台(我现在的工作就是对一套OA系统进行二次开发),把开发过程中遇到的问题和新学的技术记录在博文中,以便以

2019.10.19初赛滚粗后的日子

写在故事的前面的话 人生中第一次考CSP-S,然后考得有点自闭,我想我写这篇blog并不是想要说AFO之类的话,相反,我觉得自己应该继续坚持下去的丫子.自己以前欠了很多知识,以前是自己初中时期的不认真,现在我就把自己当成是高一才学OI的萌新,忘记过去对自己的一些期望,重新开始自己的OI生涯. 2019.10.19 今天在自闭完了之后还是逐渐接受了初赛没有多大几率过的事实,开始复习起之前学的东西.首先,今天开始复习树形DP(入门).list如下: Park visit (已过) 没有上司的舞会 (

《linux备份与恢复之一》3.19 dump(文件系统备份)

<Linux指令从初学到精通>第3章文件管理,本章介绍了许多常用命令,如cp.ln.chmod.chown.diff.tar.mv等,因为这些都与文件管理相关,在日常的使用中经常用到,因此本章是本书的重点章节.本节为大家介绍dump(文件系统备份). AD: 3.19 dump(文件系统备份) (1)频度等级:☆ (2)功能说明: dump 为备份工具程序,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件. (3)语法: dump[-cnu][-0123456789][-b <

CF #262 (DIV2) C . Present (二分答案)

output standard output Little beaver is a beginner programmer, so informatics is his favorite subject. Soon his informatics teacher is going to have a birthday and the beaver has decided to prepare a present for her. He planted n flowers in a row on

getline()函数详解 (2013-03-26 17:19:58)(转)

学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”.书上给的程序如下: int main() { string line: while(getline(cin,line)) cout<<line<<endl; return 0; } 大家会发现运行时怎么也跳不出循环,甚至会发生各种莫名其妙的错误.这是为什么呢?在这里我给大家做一个详细的讲解. 首先给大家介绍一下getline()函数(

2019中国人工智能科技(北京)展览会

2019中国人工智能科技(北京)展览会 主办单位:  中华人民共和国科学技术部 中华人民共和国国家知识产权局            中国国际贸易促进委员会         北京市人民政府 支持单位: 中华人民共和国教育部 中华人民共和国工信部 中华人民共和国商务部 国务院国有资产监督管理委员会中国中央电视台 顾问单位: 中国科学院 中国企业联合会 中国工程院 中国科学技术协会 国家海洋局 中国全国归国华侨联合会 承办单位: 北京市贸促会   北京艾尚国际展览有限公司 时间:2019年10月24-