orz!=-=今天莫名爆人品..表示受到了惊吓..

一下子从rank20-30+,突然间蹦到了rank3..=-=可怕..

或许是因为T1有看过啊类似的啊..然后T3又被40指点了一下,T2打了个暴力神马的..

但是T4依旧不会写..

晚上的时间不想改T4了..打算补补队列的知识..

什么单调队列啊,优先队列啊,看看书,刷刷题,或是把之前没有发的题解补补啊..之类的

T1:类似于队列的模拟思想

首先需要用a数组存输入的数据,b数组存放i个城市有多少个人

还需要头指针 i 和尾指针 j

如果b[a[i]]>1或是区间大于规定的最大区间,就增加尾指针

记录下当前区间最大的城市数,以及区间长度

一个细节注意,如果城市数相同的情况下,记得比较区间的长度,更新

#include<cstdio>
#include<cstring>
using namespace std;
const int INF=32768;
int a[10000001],b[32768];
int i=1,j=1,max=0,min=INF;
int n,d,tot=0;
int main(){
freopen("happy.in","r",stdin);freopen("happy.out","w",stdout);
memset(b,0,sizeof(b));
scanf("%d%d",&n,&d);
for (i=1;i<=n;i++){
scanf("%d",&a[i]);
}
i=1;
while (i<=n)
{
b[a[i]]++;
if (b[a[i]]==1) tot++;
while ((b[a[j]]>1) || ((i-j+1)>d))
{
b[a[j]]--;
if (b[a[j]]==0) tot--;
j++;
}
if (tot>max)
{
max=tot;
min=i-j+1;
}
if ((tot==max)&& (min>i-j+1)) min=i-j+1; i++;
}
printf("%d %d",max,min); return 0;
}

PS:感觉这种题型是一种技巧类的题目吧

MARK一下..

T2:动规+一点点的贪心思想

很容易看出来是个DP题,但是如果用一个三维的数组,内存是不够的;

所以我们应该想想有没有更优的情况

比较会发现,红魔法师放在蓝绿法师后面的情况,必然是最优的;

所以,只要看蓝绿法师数就可以了..

这样就只需要用二维的数组即可,f[i][j]表示i个绿法师和i个蓝法师的伤害值

动规方程的话,其实理解题目意思了之后非常好理解

for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++){
        if(i+j<=n){
            f[i][j] = max(f[i-1][j]+(i-1)*g*(j*b+t),f[i][j-1]+i*g*((j-1)*b+t));
         }
    }

PS:=-=别逗比忘了i+j<=n;

之后红法师就是n-i-j就可以了,不过不认真审题的童鞋注意一下,最后使用红法师的时候,蓝绿法师依旧会有伤害值..

附上代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int g,b,r,n,t;
int ans=0;
int f[1025][1025];
int main(){
scanf("%d%d%d%d%d",&n,&r,&g,&b,&t);
for(int i=1;i<=n;i++) f[0][i]=0;
for(int i=1;i<=n;i++) f[i][0]=f[i-1][0]+g*t*(i-1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(i+j<=n){
f[i][j] = max(f[i-1][j]+(i-1)*g*(j*b+t),f[i][j-1]+i*g*((j-1)*b+t));
}
}
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
if(i+j<=n){
int k=n-i-j;
ans=max(ans,f[i][j]+(r+i*g)*(j*b+t)*k);
}
printf("%d",ans);
return 0;
}

T3:数论或是搜索

其实这一题看起来是可以用数学方法解决的,之后经40大神指点,发现n*m/5就可以了..

那个傻逼程序就不附上了

不过DFS+剪枝的方法可以学习一下=-=

说一下题解上的剪枝的情况:

1最优化;2 每行每列每斜行的棋子数不超过这条边的长度a div 5+1;3 不可能出现连续的5个空白位置在行.列.斜行上。

=-=不过表示没有看懂std上的打法..

表示现在虽然对DFS有了很深的印象,不过对于剪枝还是很不会的..

晚上可以刷几题试试

附上DFS的代码:

program wuziqi;
var i,j,k,n,zf,kw,ala,m,mm,nn,mn,minge:longint;
a:array[-1001..1001]of longint;
dx,dy:array[0..4,0..5]of longint;
f:array[-1001..1001,0..9]of longint;
z:array[-100..100,-100..100]of boolean;
d:array[0..1001,0..8]of longint;
hang,shu,zheng,fu,zl,fl,sl:array[-1001..1001]of longint;
function min(q,w:longint):longint;
begin
if q<w then min:=q
else min:=w;
end;
procedure dfs(step,sum,asd:longint);
var zz,xx,cc,i,j,k,q,w:longint;
begin
if sum>=minge
then exit;
if (step>n*m)
then begin
for i:=1 to n do
begin
for j:=1 to m do
if not z[i,j]
then
for k:=1 to 4 do
begin
for zz:=1 to 5 do
if z[i+dx[k,zz],j+dy[k,zz]]
then break;
if not z[i+dx[k,zz],j+dy[k,zz]]
then exit;
end;
end;
minge:=sum;
exit;
end;
q:=(step-1)div m+1;
if step mod m=0
then w:=m
else
w:=step mod m;
if (hang[q]<mm)and(shu[w]<nn)
and(zheng[q+w]<mn)and(fu[q-w]<mn)
and((n-q)div 5+shu[w]<nn)and((n-q)div 5+zheng[q+w]<mn)
and((n-q)div 5+fu[q-w]<mn)
then begin
inc(zheng[q+w]);
inc(hang[q]);
inc(fu[q-w]);
inc(shu[w]);
z[q,w]:=true;
zz:=sl[w];
xx:=zl[q+w];
cc:=fl[q-w];
zl[q+w]:=0;
fl[q-w]:=0;
sl[w]:=0;
dfs(step+1,sum+1,0);
zl[q+w]:=xx;
fl[q-w]:=cc;
sl[w]:=zz;
z[q,w]:=false;
dec(shu[w]);
dec(hang[q]);
dec(zheng[q+w]);
dec(fu[q-w]);
end;
if (asd<4)and(sl[w]<4)and(zl[q+w]<4)and(fl[q+w]<4)then
begin
inc(sl[w]);
inc(zl[q+w]);
inc(fl[q-w]);
if step mod m=0 then
dfs(step+1,sum,0)
else
dfs(step+1,sum,asd+1);
dec(sl[w]);
dec(zl[q+w]);
dec(fl[q-w]);
end;
end;
begin
assign(input,'company.in');
reset(input);
assign(output,'company.out');
rewrite(output);
readln(n,m);
dx[1,1]:=-2;dx[1,2]:=-1;dx[1,3]:=1;dx[1,4]:=2;
dy[2,1]:=-2;dy[2,2]:=-1;dy[2,3]:=1;dy[2,4]:=2;
dx[3,1]:=-2;dx[3,2]:=-1;dx[3,3]:=1;dx[3,4]:=2;
dy[3,1]:=-2;dy[3,2]:=-1;dy[3,3]:=1;dy[3,4]:=2;
dx[4,1]:=-2;dx[4,2]:=-1;dx[4,3]:=1;dx[4,4]:=2;
dy[4,1]:=2;dy[4,2]:=1;dy[4,3]:=-1;dy[4,4]:=-2;
fillchar(z,sizeof(z),1);
for i:=1 to n do
for j:=1 to m do
z[i,j]:=false;
if n<m then zf:=n
else zf:=m;
mm:=m div 5+1;
nn:=n div 5+1;
mn:=zf div 5+1;
if m mod 5=0 then dec(mm);
if n mod 5=0 then dec(nn);
if zf mod 5=0 then dec(mn);
minge:=n*m div 5+1 ;
dfs(1,0,0);
writeln(minge);
close(input);
close(output);
end.

T4:单调队列+DP优化+二分答案

我表示对于二分啊,单调队列啊,还是没有什么很概念的理解,所以这一题暂且不究

晚上就好好学习一下基础的东西吧

嗯..明天继续加油

不想被笑尘黑啦...><

D12的更多相关文章

  1. D12——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D12 20180912内容纲要: 1.数据库介绍 2.RDMS术语 3.MySQL数据库介绍和基本使用 4.MySQL数据类型 5.MySQL常用命令 6.外键 ...

  2. 预科班D12

    2020.09.22星期二 预科班D12 学习内容: 一.修改文件的两种方式 1.方案一 思路:(1)先以r形式打开源文件    (2)将源文件内容一次性读入内存中,在内存中修改完毕    (3)以w ...

  3. 正式班D12

    2020.10.21星期三 正式班D12 一.目录结构 系统目录结构 目录 文件夹:存放的是具体有哪些文件 文件:存放的就是具体的数据 需要记住的 /dev/cdrom # 光盘设备,光盘里存放的内容 ...

  4. 暑假集训D12总结

    刷题 今天终于不考试= = 上午刷了一大圈线段树板子题,于是算是学会了Zkw线段树= = 下午昨天的dalao又来讲几何,然而仍然没有笔记= = 于是刷了一大圈计算几何的水题= =,并没哟啥可以写出题 ...

  5. 《转载》PAT 习题

    博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...

  6. swift学习笔记4——扩展、协议

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  7. PHP执行文档操作

    1.POWINTPOINT系列 之前参与过一个商城的项目,里面有将excel 导出的功能,但是如果要弄成PPT的我们应该怎么办呢?PHP是属于服务器端的 总不能在里面装个Powintpoint吧.于是 ...

  8. CSS-学习笔记三

    绝对定位:1. 脱离了文档流,没有浮动效果2. 默认情况下,设置了绝对定位的块,它的Top,left是相对于浏览器的3. 当给设置了绝对定位的块的父元素设置定位的时候(绝对.相对.固定),    那么 ...

  9. Codeforces Round #258 (Div. 2)

    A - Game With Sticks 题目的意思: n个水平条,m个竖直条,组成网格,每次删除交点所在的行和列,两个人轮流删除,直到最后没有交点为止,最后不能再删除的人将输掉 解题思路: 每次删除 ...

随机推荐

  1. CSDN下载频道2014年11月4日本-5日常维护公告

    尊敬的用户: CSDN于2005年推出了下载服务.经过数年的发展.下载频道的用户已经为无数用户提供了帮助,分享500万的技术资源. CSDN下载频道将于2014年11月4日23点至11月5日8点进行积 ...

  2. Win8.1 Update如何禁用OneDrive同步服务

    原文 Win8.1 Update如何禁用OneDrive同步服务 上周,IT之家为爱好者分享Win8.1 Update如何提高OneDrive上传速度教程.但是,由于国内特殊网络环境,导致微软OneD ...

  3. Oracle\MS SQL Server Update多表关联更新

    原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表 ...

  4. linux在构建SVNserver

    最近搞了一个云计算server,一些尝试部署server相关的东西.作为用显影剂server.首先要考虑的是建立SVNserver.关于构建过程记录.方便以后. 一.安装svn软件.有些云server ...

  5. 杭电dp题集,附链接还有解题报告!!!!!

    Robberies 点击打开链接 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱  最脑残的是把总的概率以为是抢N家银行的概率之和- 把状态转移方程写成了f ...

  6. c# 数据类型转换 as(C# 参考)

    as    运算符类似于强制转换操作.               但是,因此,如果转换是不可能的,as 返回 null 而不引发异常.  请看下面的示例: expression is type ? ...

  7. 收集的VS2013的使用小技巧( 不断总结中)

    对于经常使用vs的朋友,如果能用键盘直接做的事,还是键盘更便捷点,现在我就把自己遇到的一些给写下来. 1.对一个函数的说明 先写一个函数,以及参数,完成后,在函数上输入///,vs会自动补全说明的信息 ...

  8. [DevEpxress]GridControl 显示Gif动画

    原文:[DevEpxress]GridControl 显示Gif动画 如果没有对进行设置,那么GridControl列中gif在编辑状态下,才能显示动画效果,如果要设置列自动显示动画效果,可以进行如下 ...

  9. JS模块与命名空间的介绍

    起因将代码组织到类中的一个重要原因是让代码更加“模块化”,可以在很多不同的场景中实现代码的重用.但类不是唯一的模块化代码的方式. 一般来讲,模块是一个独立的JS文件.模块文件可以包含一个类定义.一组相 ...

  10. [Unity-7] Update和FixedUpdate

    1.Update和FixedUpdate这是Unity既用内提供的帧功能接口相关联. Update():这个函数里面的内容每一帧都会被运行一次.这个函数有一个特点,那就是运行的频率等于帧率.而这个帧率 ...