今天起尝试做套题喵~ (当然是因为被最大流的题目弄得恶心死了)

一共是 10 道题一道一道做 预计 3~4 内做完 尽情期待

[BZOJ 3709]Bohater

一眼就能感受到贪心的气息

因为很直观地,能加血的怪先打掉是不二法则

所以把怪分为两类: 能加血的和要掉血的

前者按伤害升序排序,算出最大血量

但后者要怎么搞让我很是郁闷~一开始是按伤害降序的,结果秒 WA 了

想想也是 Z=1000 怪1: a=998 d=1  怪2: a=100 d=99 你说先打哪只?

看来和回血量也是有关系的,事实上按回血量降序排序即可

但为什么呢?

因为最后血量是固定的,所以可以看成从最后血量开始,吐出血瓶,加上打怪时的血量一路逆推(此时怪的 d 是 a ,a 是 d) 问能否打败所有怪

然后就变成和前面一样的问题了

就这么 A 掉了,看来凡事都要反过来想想才行 (顺便提醒一句,此题 z 变量要开 long long)

#include <cstdio>
#include <algorithm>
const int sizeOfMonster=100025; inline int getint()
{
register int num=0;
register char ch;
do ch=getchar(); while (ch<'0' || ch>'9');
do num=num*10+ch-'0', ch=getchar(); while (ch>='0' && ch<='9');
return num;
}
inline void putint(int num)
{
char stack[15];
register int top=0;
if (num==0) stack[top=1]='0';
for ( ;num;num/=10) stack[++top]=num%10+'0';
for ( ;top;top--) putchar(stack[top]);
putchar(' ');
} struct node
{
int id, d, a;
inline node():id(0), d(0), a(0) {}
inline node(int _id, int _d, int _a):id(_id), d(_d), a(_a) {}
};
int n; long long z;
int t1, t2;
node add[sizeOfMonster], sub[sizeOfMonster];
inline bool cmpForAdd(node x, node y) {return x.d<y.d;}
inline bool cmpForSub(node x, node y) {return x.a>y.a;} int main()
{
register int i; n=getint(), z=getint();
for (i=1;i<=n;i++)
{
int d=getint(), a=getint();
if (d<=a) add[t1++]=node(i, d, a);
else sub[t2++]=node(i, d, a);
}
std::sort(add, add+t1, cmpForAdd);
for (i=0;i<t1;i++)
{
if (z<=add[i].d) break;
z=z+add[i].a-add[i].d;
} if (i<t1) {printf("NIE\n"); return 0;} std::sort(sub, sub+t2, cmpForSub);
for (i=0;i<t2;i++)
{
if (z<=sub[i].d) break;
z=z+sub[i].a-sub[i].d;
} if (i<t2) {printf("NIE\n"); return 0;} printf("TAK\n");
for (i=0;i<t1;i++) putint(add[i].id);
for (i=0;i<t2;i++) putint(sub[i].id);
putchar('\n'); return 0;
}

[BZOJ 3713]Iloczyn

一道很有神题外表的水题……  直接暴力就好了

话说就算 t<106 ,n_i<1018 也没有多大差啊~

因为斐波那契数列是以指数级别增长的,小于 109 的斐波那契数只有 45 个

真是想怎么搞怎么搞的节奏……

#include <cstdio>
#include <cmath>
#include <map>
const int sizeOfTot=32000;
const int sizeOfNum=1000000000; inline int getint()
{
register int num=0;
register char ch;
do ch=getchar(); while (ch<'0' || ch>'9');
do num=num*10+ch-'0', ch=getchar(); while (ch>='0' && ch<='9');
return num;
}
inline void putint(bool num)
{
if (num) putchar('T'), putchar('A'), putchar('K');
else putchar('N'), putchar('I'), putchar('E');
putchar('\n');
} int t;
int tot, f[sizeOfTot];
std::map<int, bool> exist;
inline void prepare();
inline bool check(int); int main()
{
prepare();
for (t=getint();t;t--)
putint(check(getint())); return 0;
}
inline void prepare()
{
register int i=0;
f[0]=0; f[1]=1; exist[0]=exist[1]=true;
for (i=2;(f[i]=f[i-1]+f[i-2])<sizeOfNum;i++)
exist[f[i]]=true;
tot=i;
}
inline bool check(int x)
{
if (x==0) return true;
int lim=static_cast<int>(sqrt(x+0.5));
for (int i=1;i<tot && f[i]<=lim;i++)
if (x%f[i]==0 && exist[x/f[i]])
return true;
return false;
}

[BZOJ 3715]Lustra

我很高兴又是一道水题~

显然满足条件的工厂的 w1 ,h1 是所有 w1,h1 值的最小值(之一) w2 ,h2 是所有 w2,h2 值的最大值(之一)

乱搞搞一下就好了

顺便说一句,此题卡快排 当然了你是在弃疗吗?为什么非用快排不可呢?

#include <cstdio>
const int sizeOfMirror=100025; inline int getint()
{
register int num=0;
register char ch;
do ch=getchar(); while (ch<'0' || ch>'9');
do num=num*10+ch-'0', ch=getchar(); while (ch>='0' && ch<='9');
return num;
}
inline void putint(bool num)
{
if (num) putchar('T'), putchar('A'), putchar('K');
else putchar('N'), putchar('I'), putchar('E');
putchar('\n');
} struct mirror
{
int w1, w2, h1, h2;
inline void get() {w1=getint(); w2=getint(); h1=getint(); h2=getint();}
}; int t, n;
inline bool cmp(mirror a, mirror b)
{
if (a.w1>b.w1) return false; if (a.w1<b.w1) return true;
if (a.w2<b.w2) return false; if (a.w2>b.w2) return true;
if (a.h1>b.h1) return false; if (a.h1<b.h1) return true;
if (a.h2<b.h2) return false; if (a.h2>b.h2) return true;
return true;
}
mirror M[sizeOfMirror]; int main()
{
register int i, k; for (t=getint();t;t--)
{
n=getint();
for (i=0;i<n;i++) M[i].get();
k=0;
for (i=1;i<n;i++) if (cmp(M[i], M[k]))
k=i;
for (i=0;i<n;i++)
if (M[i].w1<M[k].w1 || M[i].w2>M[k].w2 || M[i].h1<M[k].h1 || M[i].h2>M[k].h2)
break;
putint(i>=n);
} return 0;
}

[BZOJ 3714]Kuglarz

这一题着实让我想了不少时间…… 然后等我意识到怎么做时,又觉得自己的智商下滑了喵(不过我可是独立思考的,求表扬!)

一下子就想到了某最小生成树的做法,因为一段区间内的小球数的奇偶其实就是一个异或方程

我们只需要 n 个线性不相关的方程就可以算出每个 x (即位置 i 是否有小球)

我们把所有的边都排序后选出前 n 个互不线性相关的即可

但如何判断这现方程是否和之前的方程线性相关呢?让我纠结了好久……

然后,我发现了一个非常简单的做法——并查集

每一个线段都有首尾两个端点,如果之前的有数条相连的线段的首尾也是这两个端点,那么该方程与之前的方程线性相关(这里大家就感性YY一下吧233)

没理解的还是看看我的代码好了……

#include <cstdio>
#include <algorithm>
const int sizeOfSegment=4000004; int n, m;
long long ans;
inline int getint();
inline void putint(long long); int a[sizeOfSegment];
int l[sizeOfSegment], r[sizeOfSegment], c[sizeOfSegment];
int f[sizeOfSegment];
inline bool cmp(int i, int j) {return c[i]<c[j];}
int find(int u) {return f[u]==u?u:f[u]=find(f[u]);}
inline void merge(int u, int v) {u=find(u); v=find(v); if (u==v) return ; f[v]=u;} int main()
{
n=getint();
for (int i=1;i<=n;i++)
for (int j=i;j<=n;j++)
a[m]=m, l[m]=i, r[m]=j+1, c[m++]=getint();
for (int i=1;i<=n+1;i++) f[i]=i;
std::sort(a, a+m, cmp); int k=0;
for (int i=0;i<m;i++)
{
if (find(l[a[i]])!=find(r[a[i]]))
{
ans+=c[a[i]];
if (++k==n) break;
}
merge(l[a[i]], r[a[i]]);
} putint(ans); return 0;
}
inline int getint()
{
register int num=0;
register char ch;
do ch=getchar(); while (ch<'0' || ch>'9');
do num=num*10+ch-'0', ch=getchar(); while (ch>='0' && ch<='9');
return num;
}
inline void putint(long long num)
{
char stack[20];
register int top=0;
if (num==0) stack[top=1]='0';
for ( ;num;num/=10) stack[++top]=num%10+'0';
for ( ;top;top--) putchar(stack[top]);
putchar('\n');
}

[PA2014] [BZOJ 3709]~[BZOJ 3719] 合集的更多相关文章

  1. BZOJ 3709&&AGC 018 C——多段排序的微扰法

    BZOJ 3709• 有n只怪物,你的初始生命值为z.• 为了打败第i只怪物,你需要消耗cost[i]点生命值,但怪物死后会使你恢复val[i]点生命值.• 任何时候你的生命值都不能小于等于0.• 问 ...

  2. DP+贪心水题合集_C++

    本文含有原创题,涉及版权利益问题,严禁转载,违者追究法律责任 本次是最后一篇免费的考试题解,以后的考试题目以及题解将会以付费的方式阅读,题目质量可以拿本次作为参考 本来半个月前就已经搞得差不多了,然后 ...

  3. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  4. 【Android】开发中个人遇到和使用过的值得分享的资源合集

    Android-Classical-OpenSource Android开发中 个人遇到和使用过的值得分享的资源合集 Trinea的OpenProject 强烈推荐的Android 开源项目分类汇总, ...

  5. [Erlang 0122] Erlang Resources 2014年1月~6月资讯合集

    虽然忙,有些事还是要抽时间做; Erlang Resources 小站 2014年1月~6月资讯合集,方便检索.      小站地址: http://site.douban.com/204209/   ...

  6. [Erlang 0114] Erlang Resources 小站 2013年7月~12月资讯合集

    Erlang Resources 小站 2013年7月~12月资讯合集,方便检索.     附 2013上半年盘点: Erlang Resources 小站 2013年1月~6月资讯合集    小站地 ...

  7. SQL用法操作合集

    SQL用法操作合集   一.表的创建 1.创建表 格式: 1 CREATE TABLE 表名 2 (列名 数据类型(宽度)[DEFAULT 表达式][COLUMN CONSTRAINT], 3 ... ...

  8. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  9. Lucene搜索方式大合集

    package junit; import java.io.File; import java.io.IOException; import java.text.ParseException; imp ...

随机推荐

  1. SQL语句查询所耗时间与效能的语句

    1)SQL查询所耗时间语句 原理:记录当前时间1,执行SQL语句,记录当前时间2,显示时间2与时间1的差. 由于第一次执行的所耗时间为真实时间,之后会保存在缓存中,所以第二次之后的查询所耗时间都会比第 ...

  2. matlab中如何保留指定的变量的数据

    在使用matlab时,通常要将计算的结果保存到mat文件中.使用的命令是: save filename 但是用上述命令保存的时候,会将计算过程中的其他变量一起保存了.这中粗糙的保存有以下缺点: (1) ...

  3. [C/C++]C++标准中的名词

    1.qualified-id.nested-name-specifier: [example: struct A { struct B { void F(); }; }; A is an unqual ...

  4. 数组的filter方法

    filter()函数用于过滤序列,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素. eg: var arr=[10,11,12,13,14 ...

  5. (spring-第6回【IoC基础篇】)BeanDefinition——实例化Bean之前的第一大利器。

    上节讲了Bean实例化的内部机制,这里再复述一遍: ResourceLoader从系统中加载XML配置信息,并由Resource来表示. BeanDefinitionReader从Resource中读 ...

  6. eclipse中导入一个android工程有The import android cannot be resolved错误怎么办

    解决方法: 右键工程→Bulid Path→Configure Build Path... 选择Android,如图,在Project Build Target里面勾选相应的SDK即可 右键工程,pr ...

  7. UIkit框架之UItextfield

    1.继承链:UIcontrol:UIview:UIresponder:NSObject 2.成为第一响应者:[text becomeFirstResponder];  //让该文本成为第一响应者 3. ...

  8. Qemu+gdb跟踪内核源码

    1.编译安装Qemu Qemu源码下载地址:http://wiki.qemu.org/Download linux下可以直接用wget下载: wget http://wiki.qemu.org/dow ...

  9. 关于binary search的一点解惑

    在写binary search时对于mid的计算我最开始使用的是 mid = (low + high)/2; 后来看到在很多的实现为 mid = low + (high - low)/2; 想了一下两 ...

  10. android中KSOAP2中的anytype{}问题

    如果web返回为空,即空字符串的时候,KSOAP2会返回一个anytype{}这样的一个串回来,要比对下是不是这个串,如果是就返回null,从而避免查不到数据时没有相应处理. if (jsonStr. ...