今天学长给我们挂了一套Div.1的题,难受,好难啊。

Problem A:

题目大意:给你n个数字,让你叠成n堆,每个数字上面的数的个数不能超过这个数,如 3 上面最多放三个数字

问你,最少能放几堆。

刚开始看错题意,以为只要比这个数字小的数都能放上去,后来看清了题意,一直想的是怎么从下往上放,感觉

二分加贪心可以做,但是太麻烦了,后来想如果从上往下放就好做多了,每次从小的开取,这样到取下一个数的

时候就知道上面有多少,能不能取这个数,这样的话也能保证这一堆是最优的。

#include<bits/stdc++.h>
using namespace std;
int a[],n;
bool vis[];
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n);
int sum=n;
int ans=;
int now=;
while(sum)
{
//cout<<sum<<endl;
for(int i=;i<n;i++)
{
if(!vis[i])
{
if(a[i]>=now)
{
now++;
vis[i]=;
sum--;
}
}
}
ans++;
now=;
}
cout<<ans<<endl;
return ;
}

Problem B:

题目大意:让你给出一幅图,让这幅图从1节点到2节点的最短路的条数为k,且节点个数不能超过1000个。

思路:如果没有节点个数的限制那么这题就非常好些,但有了限制的话其实我们可以这么想,我们可以把

k用2进制表示,这样就能将条数表示成2*2*2...+2*2...的方式。刚写的时候每条单链都是新的,取极限值的

时候会超过1000个节点,于是我就先预处理处一条长度为100的单链重复利用。

#include<bits/stdc++.h>
using namespace std;
int k;
int a[],pos;
bool vis[][];
int len[];//len[i]表示还需要增加i长度的链需要接在那个节点上
int main()
{
vis[][]=vis[][]=;
len[]=;
len[]=;
int ct=;
for(int i=;i>=;i--)
{
vis[i][i-]=vis[i-][i]=;
len[++ct]=i-;
}
cin>>k;
pos=;
while(k)
{
a[pos++]=k&;
k=k>>;
}
pos--;
int cnt=;
for(int i=pos;i>=;i--)
{
if(a[i])
{
for(int j=;j<=i;j++)
{
if(j==)
{
cnt++;
vis[cnt][]=;
vis[][cnt]=;
cnt++;
vis[cnt][]=;
vis[][cnt]=;
}
else
{
cnt++;
vis[cnt][cnt-]=vis[cnt-][cnt]=;
vis[cnt][cnt-]=vis[cnt-][cnt]=;
cnt++;
vis[cnt][cnt-]=vis[cnt-][cnt]=;
vis[cnt][cnt-]=vis[cnt-][cnt]=;
}
}
if(i==pos)
{
vis[cnt][]=vis[][cnt]=;
vis[cnt-][]=vis[][cnt-]=;
}
else
{
if(!i) vis[][len[pos+]]=vis[len[pos+]][]=;
else
{
vis[cnt][len[pos-i+]]=vis[len[pos-i+]][cnt]=;
vis[cnt-][len[pos-i+]]=vis[len[pos-i+]][cnt-]=;
}
}
}
}
cout<<""<<endl;
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
if(vis[i][j] && i!=j) printf("Y");
else printf("N");
}
puts("");
}
return ;
}

Problem C:

题目大意:有n堆牌,A只能从顶部取牌,B只能从底部取牌,A先取,如果每个人都希望自己的点数总和

最大,且每个人的操作都最优,问你最后两个人的点数分别是什么。

思路:这个题还是比较简单的贪心,我们可以这么想,我们把每堆牌都分成上堆和下堆,如果是奇数则

把中间的牌取出来放到一个数组里。如果对A来说下堆有对他有利的大牌,他会想去拿,但是B也是最优

操作,B不会让A拿到,对B来说也是同理,所以最后肯定上堆都是A的下堆都是B的,奇数堆取出来的一

个一个分。

#include<bits/stdc++.h>
using namespace std;
vector<int> zhong;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n;
cin>>n;
int sum1=,sum2=;
for(int i=;i<=n;i++)
{
int m;
scanf("%d",&m);
if(m%==)
{
for(int i=;i<=m;i++)
{
int g;scanf("%d",&g);
if(i<=m/) sum1+=g;
else sum2+=g;
}
}
else
{
for(int i=;i<=m;i++)
{
int g;scanf("%d",&g);
if(i<=m/) sum1+=g;
else if(i==m/+) zhong.push_back(g);
else sum2+=g;
}
}
}
sort(zhong.begin(),zhong.end(),cmp);
for(int i=;i<zhong.size();i++)
{
if(i%==) sum1+=zhong[i];
else sum2+=zhong[i];
}
printf("%d %d\n",sum1,sum2);
return ;
}

Codeforces Round #228 (Div. 1)的更多相关文章

  1. Codeforces Round #228 (Div. 2) C. Fox and Box Accumulation(贪心)

    题目:http://codeforces.com/contest/389/problem/C 题意:给n个箱子,给n个箱子所能承受的重量,每个箱子的重量为1: 很简单的贪心,比赛的时候没想出来.... ...

  2. Codeforces Round #228 (Div. 1) C. Fox and Card Game 博弈

    C. Fox and Card Game 题目连接: http://codeforces.com/contest/388/problem/C Description Fox Ciel is playi ...

  3. Codeforces Round #228 (Div. 1) B. Fox and Minimal path 构造

    B. Fox and Minimal path 题目连接: http://codeforces.com/contest/388/problem/B Description Fox Ciel wants ...

  4. Codeforces Round #228 (Div. 1) A. Fox and Box Accumulation 贪心

    A. Fox and Box Accumulation 题目连接: http://codeforces.com/contest/388/problem/A Description Fox Ciel h ...

  5. Codeforces Round #228 (Div. 1) 388B Fox and Minimal path

    链接:http://codeforces.com/problemset/problem/388/B [题意] 给出一个整数K,构造出刚好含有K条从1到2的最短路的图. [分析] 由于是要自己构造图,当 ...

  6. Codeforces Round #228 (Div. 2)

    做codeforces以来题目最水的一次 A题: Fox and Number Game 题意:就是用一堆数字来回减,直到减到最小值为止,再把所有最小值加,求这个值 sol: 简单数论题目,直接求所有 ...

  7. Codeforces Round #228 (Div. 2) B. Fox and Cross

    #include <iostream> #include <string> #include <vector> #include <algorithm> ...

  8. Codeforces Round #228 (Div. 2) A. Fox and Number Game

    #include <iostream> #include <algorithm> #include <vector> #include <numeric> ...

  9. Codeforces Round #228 (Div. 1) B

    B. Fox and Minimal path time limit per test 1 second memory limit per test 256 megabytes input stand ...

随机推荐

  1. BZOJ3527 [Zjoi2014]力 【fft】

    题目 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入格式 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. 输出格式 n行,第i行输出Ei.与标准答案误差不超过 ...

  2. pycharm永久激活(转)

    机器上安装的pycharm失效了,注册服务器也不管用了.网上找了一个比较满意的激活方法,推荐给大家: 第一步:下载jar包: 此jar包的目的就是让截获截止时间并骗过pycharm; 百度云下载地址  ...

  3. greenplum不能下载问题解决方法(转)

    到官网下载greenplum安装包的时候,可能会发现不能下载,提示: 出现这个问题的原因有几个方面: 最常见的原因是注册账号是填写了虚假或者无意义的信息,譬如名字是 123,地址是 abc. Pivo ...

  4. eclips环境下开发spring boot项目,application.properties配置文件下中文乱码解决方案

    如以上,application.properties文件下中文乱码.发生乱码一般都是由于编码格式不一样导致的. 打开Window-Preferences-General-content Types-T ...

  5. plist反序列化

    // //  ViewController.m //  03-plist文件的一个反序列化 // //  Created by jerry on 15/9/28. //  Copyright (c) ...

  6. PhantomJSのメモいろいろ

    提供されるモジュール群は5つ phantom: そのもの FileSystem: ファイルに出力したり.依存ファイルの存在確認したり System: コマンドラインから引数取りたいなら WebPage ...

  7. kafka系列七、kafka核心配置

    一.producer核心配置 1.acks :发送应答(默认值:1) 生产者在考虑完成请求之前要求leader收到的确认的数量.这控制了发送的记录的持久性.允许以下设置: acks=0:设置为0,则生 ...

  8. Python3学习笔记24-操作文件和目录

    环境变量 在操作系统中定义的环境变量,全部保存在os.environ这个变量中,可以直接查看: import os print(os.environ) 操作文件和目录 操作文件和目录的函数一部分放在o ...

  9. 支付宝&微信统一支付

    1.实体对应关系: Application  — 支付记录实体 --  支付记录详情 2.流程 1.生成订单选择支付类型 2.支付宝:PC端.手机端.扫码:微信:微信公众号支付.扫码支付.H5支付. ...

  10. 如何在DOS窗口复制和粘贴命令

    在键盘上按下windows+R键,打开运行窗口. 在“打开”处输入cmd,并按下enter键,打开DOS窗口. 把鼠标移动到DOS窗口标题处,单击鼠标右键,选择属性. 把编辑选项处的“快速编辑模式”勾 ...