Problem:给出全班人的个数总分和小明的分数(满分100分),求小明最低排名和最高排名

sol:假设小明的排名为k,总分为sum,小明的分数是r,

贪心求解,

最坏情况下,小明前面的比小明高一分(r+1)分,那么给后面的人的分数是sum-(k-1)*(r+1)-r

最优情况下,小明前面的人都是满分(100)分,那么给后面人的分数是sum-(k-1)*100-r

所以对于后面人分数的取值范围是A=[sum-(k-1)*100-r,sum-(k-1)*(r+1)-r]

而对于一个很显然的结论由于小明是第k名所以在他后面(含一样的分数)有n-k人,他们的分数的取值范围是B=[0,(n-k)*r]

如果说A和B有交集的话该问题有解,可以求出连续的一段范围求最小的l,最大的r

判断交集快速的方法是

1. 判包含关系。

2.判某条线段的左右断点是不是在另外一条线段内。

# include<bits/stdc++.h>
using namespace std;
bool check(int l1,int r1,int l2,int r2)
{
if (l1>r1) swap(l1,r1);
if (l2>r2) swap(l2,r2);
if (l1>=l2&&r2>=r1) return ;
if (l2>=l1&&r1>=r2) return ;
if (l2>=l1&&l2<=r1) return ;
if (r2>=l1&&r2<=r1) return ;
return ;
}
int main()
{
int N,A,S;
scanf("%d%d%d",&N,&A,&S);
if (A==) { puts("1 1");return ; }
int l=N,r=;
for (int i=;i<=N;i++)
if (check(S-(i-)*(A+)-A,S-(i-)*-A,,A*(N-i))) {
l=min(l,i); r=max(r,i);
}
printf("%d %d\n",l,r);
return ;
}

sol:考虑问题平方和就是要大的数尽可能大,通过题目中所说的东西

  • rec1=a or b
  • rec2=a and b
  • a=rec1 ,b=rec2

发现本质其实是把两个数的某个二进制位交换,所以最后就是每位有若干的1,让你分配到对应的位置,最大化平方和

就是尽可能放大的数,然后平方以后就是最大的。

# include <bits/stdc++.h>
# define int long long
using namespace std;
const int MAXN=;
int b[MAXN],n;
inline int read()
{
int X=,w=; char c=;
while (!(c>=''&&c<='')) w|=c=='-',c=getchar();
while (c>=''&&c<='') X=(X<<)+(X<<)+(c^),c=getchar();
return w?-X:X;
}
void getbit(int x)
{
for (int i=;i<=;i++)
if ((x>>i)&==) b[i]++;
}
signed main()
{
n=read(); int x;
for (int i=;i<=n;i++) x=read(),getbit(x);
int num=;for (int i=;i<=;i++) num+=b[i];
int ans=;
while () {
if (num==) break;
int tmp=;
for (int i=;i>=;i--)
if (b[i]>) b[i]--,tmp+=(<<i),num--;
ans+=tmp*tmp;
}
cout<<ans<<endl;
return ;
}

sol:一道DP题其实比较简单

一开始状态定义错了,导致最长不下降子序列弄错了(其实和前面0的个数有关系)

f[i][j][k]前i个,有j个0,LIS长度为k个的数的可能性

若第i+1位为0,那么f[i+1][j+1][k]+=f[i][j][k]

若第i+1位为1,那么f[i+1][j][max(k,j)]+=f[i][j][k]

为什么是max(k,j)呢? 由于第i+1位为是1那么和前面有j个0构成一个最长上升子序列长度是j,

而此时加入一个1才到达长度为k,那么此时最长的长度可能并不会发生更新,可能还是前面都是0的子序列更优(一开始没有把0的个数作为一个状态!)

初始值f[0][0][0]=1

# include <bits/stdc++.h>
# define int long long
using namespace std;
const int MAXN=;
const int mo=1e9+;
int n;
int f[MAXN][MAXN][MAXN];
inline int read()
{
int X=,w=; char c=;
while (!(c>=''&&c<='')) w|=c=='-',c=getchar();
while (c>=''&&c<='') X=(X<<)+(X<<)+(c^),c=getchar();
return w?-X:X;
}
signed main()
{
n=read(); memset(f,,sizeof(f));
f[][][]=;
//f[i][j][k]前i个,有j个0,长度为k个数
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
for (int k=;k<=n;k++)
{
f[i+][j+][k]=(f[i+][j+][k]+f[i][j][k])%mo;
f[i+][j][max(k,j)+]=(f[i+][j][max(k,j)+]+f[i][j][k])%mo;
}
int ans=;
for (int j=;j<=n;j++)
for (int k=;k<=n;k++)
ans=(ans+(max(k,j)*f[n][j][k])%mo)%mo;
cout<<ans<<endl;
return ;
}

HGOI 20181030晚 题解的更多相关文章

  1. codeforces 476C.Dreamoon and Sums 解题报告

    题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...

  2. 牛客编程巅峰赛S1第5场 - 青铜&白银 C.排队 (优先队列,归并排序)

    题意:有\(m\)个窗口,\(n\)个人排队,每个人都有各自的办理时间,只有办理完成窗口才能空出来,后面的人开始办理,求有多少人比后面的人开始办理的早但完成的晚. 题解:我们可以用优先队列来模拟办理, ...

  3. HGOI NOIP模拟4 题解

    NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...

  4. HGOI 20181028 题解

    HGOI 20181028(复赛备考) /* 真是暴力的一天,最后一题MLE?由于数组开得太大了!!! 270滚粗 考场上好像智商高了很多?!(假的) */ sol:暴力求解,然后没有数据范围吐槽一下 ...

  5. 6.25考试整理:江城唱晚&&不老梦&&棠梨煎雪——题解

    按照旧例,先安利一下主要作者:一扶苏一 以及扶苏一直挂念的——银临姐姐:银临_百度百科 (滑稽) 好哒,现在步入正题: 先看第一题: 题解: 在NOIP范围内,看到“求方案数”,就说明这个题是一个计数 ...

  6. HGOI 20190310 题解

    /* 又是又双叒叕WA的一天... 我太弱鸡了... 今天上午打了4道CF */ Problem 1 meaning 给出q组询问,求下列函数的值$ f(a) = \max\limits_{0 < ...

  7. HGOI 20190303 题解

    /* 记一串数字真难. 5435 今天比赛又是hjcAK的一天. 今天开题顺序是312,在搞T1之前搞了T3 昨天某谷月赛真是毒瘤. 但是讲评的同学不错,起码T4看懂了... 构造最优状态然后DP的思 ...

  8. HGOI 20180224 题解

    /* The Most Important Things: ljc chat with fyh on QQTa说期末考Ta数学74分感觉不好但是我觉得fyh是地表最强的鸭~~(of course en ...

  9. HGOI 20190218 题解

    /* 又是AK局... hjc又双叒叕AK了... Hmmm...我侥幸 */ Problem A card 给出无序序列a[]可以选择一个数插入到合适的位置作为一次操作,至少多少次操作后可以把序列变 ...

随机推荐

  1. Docker:一个装应用的容器

    一:简介:你是否经历过“我本地运行没问题啊!““哪个哥们有写死循环了““完了,服务器撑不住了“等等问题,docker就是这么帮你解决问题的工具,它可以帮你把web应用自动化打包和发布,在服务型环境下进 ...

  2. WFP loading 窗口显示 SplashScreen

    public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { Spl ...

  3. 20155204 王昊《网络对抗技术》EXP4

    20155204 王昊<网络对抗技术>EXP4 一.实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有 ...

  4. 20155210 Exp8 WEB基础实践

    Exp8 WEB基础实践 Apache环境配置 apache是kali下的web服务器,通过访问ip地址+端口号+文件名称可以打开对应的网页. 输入命令vi /etc/apache2/ports.co ...

  5. ListBox项模板中绑定ListBoxItem属性的方法

    原文:ListBox项模板中绑定ListBoxItem属性的方法 <ListBox> <ListBox.ItemTemplate> <DataTemplate> & ...

  6. PostgreSQL杂记页

    磨砺技术珠矶,践行数据之道,追求卓越价值  luckyjackgao@gmail.com 返回顶级页:PostgreSQL索引页 此页,记录其他数据库,linux以及各种点滴事项 1--数据库设计 1 ...

  7. libgdx学习记录1——图片显示Texture

    libgdx底层采用opengl渲染,对图片进行了优化处理,与android原生态的bitmap不太一样. 相比而言,效率要高一些,不过只支持png,jpg,bmp三种格式. 显示中,一般将图片放在a ...

  8. stl源码剖析 详细学习笔记stack queue

    // //  stack.cpp //  笔记 // //  Created by fam on 15/3/15. // // //---------------------------15/03/1 ...

  9. 《深入浅出NodeJS》mindmap

    接触NodeJS有快两年了,但因为和我的工作内容关系不大,所以一直没有系统的学习.最近终于有空能系统地了解学习一下这门技术,于是买了一本朴灵老师的<深入浅出NodeJS>仔细研读.这本书内 ...

  10. Kaggle入门(一)——Digit Recognizer

    目录 0 前言 1 简介 2 数据准备 2.1 导入数据 2.2 检查空值 2.3 正则化 Normalization 2.4 更改数据维度 Reshape 2.5 标签编码 2.6 分割交叉验证集 ...