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. [Lydsy1805月赛]口算训练 BZOJ5358

    分析: 没想到这道题还能二分查找... 这题主席树的话,裸的很显然...我们将每一个数分解质因数,之后建一个可持久化权值线段树维护[L,R]区间内的每一种质因子的个数,分解质因数的话,可以选择用线筛, ...

  2. Linux 网络监控工具 ss

    ss命令用来显示处于活动状态的套接字信息.功能和netstat类似,但比netstat更快更高效. ss -h Usage: ss [ OPTIONS ] ss [ OPTIONS ] [ FILTE ...

  3. plsql命令行窗口执行脚本打印输出

    1.我们可以写一些简单的检查数据库的检查脚本 prompt Importing table t_test0... set feedback off set define off ; ; prompt ...

  4. VB CompactDatabase 压缩/修复数据库

    Option Explicit Private Sub Command1_Click() On Error GoTo err Dim DbEngine, dbFile As String dbFile ...

  5. c# C#获取屏幕鼠标坐标点颜色

    [DllImport("user32.dll")] private static extern IntPtr GetDC(IntPtr hwnd); [DllImport(&quo ...

  6. Python算法基础

    一.简介 定义和特征 定义:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时 ...

  7. 20155204《网络对抗》Exp8 Web基础

    20155204<网络对抗>Exp8 Web基础 一.基础问题回答 1.什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用C ...

  8. [2016北京集训测试赛17]crash的游戏-[组合数+斯特林数+拉格朗日插值]

    Description Solution 核心思想是把组合数当成一个奇怪的多项式,然后拉格朗日插值..:哦对了,还要用到第二类斯特林数(就是把若干个球放到若干个盒子)的一个公式: $x^{n}=\su ...

  9. ssh无法登录,提示Connection closing...Socket close.

    一.问题无法ssh直接连接到服务器 [C:\~]$ ssh 192.168.7.77 Connecting to ... Connection established. To escape to lo ...

  10. 微信小程序之页面传值(路由、页面栈、globalData、缓存)

    1. 通过url带参数传递 1.1 固定参数传递 例如,从 list 页面到 detail 页面, 传递一个或多个固定值 list页面传值: <!--pages/list/list.js--&g ...