A Abs Problem http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5330

找规律题,构造出解。copyright@ts

 #include<cstdio>
int main() {
int n,big,sma,id;
while(~scanf("%d",&n)) {
if(n==) {
puts("1 1");
puts("");
puts("");
continue;
}
if(n==) {
puts("1 1");
puts("1 2");
puts("2 1");
continue;
}
if(!((n-)%)||!(n%)) {
sma=;
}
else {
sma=;
}
if(sma) {
if(n&) {
big=n;
id=;
}
else {
big=n-;
id=;
}
}
else {
if(n&) {
big=n-;
id=;
}
else {
big=n;
id=;
}
}
printf("%d %d\n",sma,big);
printf("%d",n);
for(int i=n-;i>=;i--) {
printf(" %d",i);
}
puts("");
if(id==||id==) {
for(int i=n-;i>=;i--) {
printf("%d ",i);
}
printf("%d %d %d\n",n-,n-,n);
}
else {
for(int i=n-; i>=; i--) {
printf("%d ",i);
}
printf("%d\n",n);
}
}
return ;
}

E Easy 2048 Again http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5334

状态压缩dp,只需要存递减的状态。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define mt(a,b) memset(a,b,sizeof(a))
using namespace std;
const int M=;
const int all=<<;
int a[M],dp[][all];
int main(){
int t,n;
int to[];///将输入变成2的x次方
int p2[];///存2的i次方
p2[]=;
for(int i=;i<=;i++){
p2[i]=p2[i-]*;
}
to[]=;
to[]=;
to[]=;
to[]=;
while(~scanf("%d",&t)){
while(t--){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
a[i]=to[a[i]];
}
mt(dp,-);
int pre=,now=;
dp[pre][]=;
for(int i=;i<=n;i++,now^=,pre^=){
for(int j=;j<all;j++){
if(~dp[pre][j]){
dp[now][j]=max(dp[now][j],dp[pre][j]);///不选
///下面是选
int t=j;///下一个状态
int k=a[i]-;
///dp中第二维0001表示有个2,0011表示有4,2,0111表示8,4,2
int q=(<<k)-;///q为( 比k低一位的位数全是1 )的数
int sum=p2[a[i]];///新得分
if(!(t&q)){///如果比k低的位全是0,才能合并
while((t&(<<k))){
sum+=p2[k+];
k++;
}
q=(<<k)-;
t&=~q;///把比k低的位数全变成0
t|=<<k;
}
else{
t=<<k;///不能合并,产生新递减序列,只有k位是1
}
dp[now][t]=max(dp[now][t],dp[pre][j]+sum);
}
}
}
int ans=;
for(int i=;i<all;i++){
ans=max(ans,dp[pre][i]);
}
printf("%d\n",ans);
}
}
return ;
}

G YY's Minions http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5336

模拟题,怎么说怎么做。

 #include<cstdio>
#include<algorithm>
using namespace std;
const int M=;
char op[M];
int mat[][M][M],n,m,f,k,t;
struct G{
int t,x,y;
friend bool operator <(G a,G b){
return a.t<b.t;
}
}g[M*M];
int dx[]={-,-,-,,,,,};
int dy[]={-,,,-,,-,,};
int sum(int x,int y,int pre){
int res=;
for(int i=,tx,ty;i<;i++){
tx=x+dx[i];
ty=y+dy[i];
if(tx>=&&tx<=n&&ty>=&&ty<=m){
if(mat[pre][tx][ty]&){
res++;
}
}
}
return res;
}
int change(int pre,int num){
if(pre==){
if(num==) return ;
return ;
}
if(num==||num==) return ;
return ;
}
char tochar(int x){
if(x==) return 'X';
return x+'';
}
int main(){
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d%d%d",&n,&m,&f,&k);
int pre=,now=;
for(int i=;i<=n;i++){
scanf("%s",op);
for(int j=;j<m;j++){
mat[pre][i][j+]=op[j]-'';
}
}
for(int i=;i<k;i++){
scanf("%d%d%d",&g[i].t,&g[i].x,&g[i].y);
}
sort(g,g+k);
for(int u=,head=;u<=f;u++,pre^=,now^=){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(mat[pre][i][j]==){
mat[now][i][j]=;
continue;
}
int num=sum(i,j,pre);
mat[now][i][j]=change(mat[pre][i][j],num);
}
}
while(head<k&&g[head].t==u){
mat[now][g[head].x][g[head].y]=;
head++;
}
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
putchar(tochar(mat[pre][i][j]));
}
putchar('\n');
}
}
}
return ;
}

用vector就不用排序了。

 #include<cstdio>
#include<vector>
using namespace std;
const int M=;
char op[M];
int mat[][M][M],n,m,f,k,t;
struct G{
int x,y;
}p;
vector<G> g[M*M];
int dx[]={-,-,-,,,,,};
int dy[]={-,,,-,,-,,};
int sum(int x,int y,int pre){
int res=;
for(int i=,tx,ty;i<;i++){
tx=x+dx[i];
ty=y+dy[i];
if(tx>=&&tx<=n&&ty>=&&ty<=m){
if(mat[pre][tx][ty]&){
res++;
}
}
}
return res;
}
int change(int pre,int num){
if(pre==){
if(num==) return ;
return ;
}
if(num==||num==) return ;
return ;
}
char tochar(int x){
if(x==) return 'X';
return x+'';
}
int main(){
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d%d%d",&n,&m,&f,&k);
int pre=,now=;
for(int i=;i<=n;i++){
scanf("%s",op);
for(int j=;j<m;j++){
mat[pre][i][j+]=op[j]-'';
}
}
for(int i=;i<=f;i++){
g[i].clear();
}
for(int i=,ti;i<k;i++){
scanf("%d%d%d",&ti,&p.x,&p.y);
g[ti].push_back(p);
}
for(int u=,head=;u<=f;u++,pre^=,now^=){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(mat[pre][i][j]==){
mat[now][i][j]=;
continue;
}
int num=sum(i,j,pre);
mat[now][i][j]=change(mat[pre][i][j],num);
}
}
int lg=g[u].size();
for(int i=;i<lg;i++){
mat[now][g[u][i].x][g[u][i].y]=;
}
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
putchar(tochar(mat[pre][i][j]));
}
putchar('\n');
}
}
}
return ;
}

H Machine http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5337

树的深搜。邻接表快一些

 #include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#define mt(a,b) memset(a,b,sizeof(a))
using namespace std;
const int M=;
struct G{
struct E{
int v,next;
}e[M<<];
int le,head[M];
void init(){
le=;
mt(head,-);
}
void add(int u,int v){
e[le].v=v;
e[le].next=head[u];
head[u]=le++;
}
}g;
vector<int> son[M];
int dfs(int u,int fa){
son[u].clear();
for(int i=g.head[u];~i;i=g.e[i].next){
int v=g.e[i].v;
if(v!=fa){
son[u].push_back(dfs(v,u));
}
}
sort(son[u].begin(),son[u].end());
int res=,ls=son[u].size();
for(int i=;i<ls;i++){
res=max(res,son[u][i]+ls-i-);
}
return res;
}
int main(){
int n;
while(~scanf("%d",&n)){
g.init();
for(int v=,u;v<=n;v++){
scanf("%d",&u);
g.add(u,v);
g.add(v,u);
}
printf("%d\n",dfs(,-));
}
return ;
}

vector慢一些

 #include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int M=;
vector<int> g[M],son[M];
int dfs(int u,int fa){
son[u].clear();
int lu=g[u].size();
for(int i=;i<lu;i++){
int v=g[u][i];
if(v!=fa){
son[u].push_back(dfs(v,u));
}
}
sort(son[u].begin(),son[u].end());
int res=,ls=son[u].size();
for(int i=;i<ls;i++){
res=max(res,son[u][i]+ls-i-);
}
return res;
}
int main(){
int n;
while(~scanf("%d",&n)){
for(int i=;i<=n;i++){
g[i].clear();
}
for(int v=,u;v<=n;v++){
scanf("%d",&u);
g[u].push_back(v);
g[v].push_back(u);
}
printf("%d\n",dfs(,-));
}
return ;
}

I Incircle and Circumcircle http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5338

机智的用不对的三分过了。定义圆都在y轴,定义三角形一个点在圆心,定义三角形是等腰的。

 #include<cstdio>
#include<cmath>
const double eps=1e-;
double r,R;
double f(double y) {
double Y=*R*(-(r*r)/(y*y));
return fabs(Y-y-r);
}
double TernarySearch(double L,double R) { // 三分查找
while(R-L>eps) {
double LL=(L*+R)/;
double RR=(L+R*)/;
if(f(LL)<f(RR)) //f为对应的值 这里求最小值
R=RR;
else
L=LL;
}
return L;
}
int main(){
int t1,t2;
while(~scanf("%d%d",&t1,&t2)){
if(t1*>t2){
puts("NO Solution!");
continue;
}
r=t1;
R=t2;
double ansy=TernarySearch(r,R+R-r);
ansy+=r;
double tmp=ansy-r;
double sinxita=r/tmp;
double cosxita=sqrt(tmp*tmp-r*r)/tmp;
double a=ansy*tmp/sqrt(tmp*tmp-r*r);
double b=a;
double c=*a*r/tmp;
printf("%.18f %.18f %.18f\n",a,b,c);
}
return ;
}

end

ZOJ Monthly, August 2014的更多相关文章

  1. 浙大月赛ZOJ Monthly, August 2014

    Abs Problem Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Alice and Bob is playing a ga ...

  2. 135 - ZOJ Monthly, August 2014

    135 - ZOJ Monthly, August 2014 A:构造问题,推断序列奇偶性.非常easy发现最小值不是1就是0.最大值不是n就是n - 1,注意细节去构造就可以 E:dp.dp[i][ ...

  3. ZOJ Monthly, November 2014

    做了一次月赛,没想到这么难,加上后来补上的题目也只有3个题.第一名也只有4个题啊啊啊啊~.其中两道还是水题.留坑慢慢补上来. 3832 Tilt Cylinder 给定如图所示有盖圆柱体,R,H,水面 ...

  4. ZOJ Monthly, June 2014 月赛BCDEFGH题题解

    比赛链接:点击打开链接 上来先搞了f.c,,然后发现状态不正确,一下午都是脑洞大开,, 无脑wa,无脑ce...一样的错犯2次.. 硬着头皮搞了几发,最后20分钟码了一下G,不知道为什么把1直接当成不 ...

  5. 记次浙大月赛 134 - ZOJ Monthly, June 2014

    链接 虽做出的很少,也记录下来,留着以后来补..浙大题目质量还是很高的 B 并查集的一些操作,同类和不同类我是根据到根节点距离的奇偶判断的,删点是直接新加一个点,记得福大月赛也做过类似的,并差集的这类 ...

  6. 137 - ZOJ Monthly, November 2014 - J Poker Face

    Poker Face Time Limit: 2 Seconds      Memory Limit: 65536 KB As is known to all, coders are lack of ...

  7. ZOJ Monthly, June 2014 解题报告

    A.Another Recurrence Sequence problemId=5287">B.Gears 题目大意:有n个齿轮,一開始各自为一组.之后进行m次操作,包含下面4种类型: ...

  8. ZOJ 4010 Neighboring Characters(ZOJ Monthly, March 2018 Problem G,字符串匹配)

    题目链接  ZOJ Monthly, March 2018 Problem G 题意  给定一个字符串.现在求一个下标范围$[0, n - 1]$的$01$序列$f$.$f[x] = 1$表示存在一种 ...

  9. ZOJ 4009 And Another Data Structure Problem(ZOJ Monthly, March 2018 Problem F,发现循环节 + 线段树 + 永久标记)

    题目链接  ZOJ Monthly, March 2018 Problem F 题意很明确 这个模数很奇妙,在$[0, mod)$的所有数满足任意一个数立方$48$次对$mod$取模之后会回到本身. ...

随机推荐

  1. QtPropertyBrowser+vs2010的安装与配置(转)

    这一篇文章有些问题,后又写了一篇,地址是http://www.cnblogs.com/aminxu/p/4552410.html 转自http://blog.csdn.net/jingwenlai_s ...

  2. 【学习笔记】【C语言】数据

    1. 什么是数据 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据.图片数据.视频数据,还有聊QQ时产生的文字数据.用迅 ...

  3. OC3-xml文件解析

    <?xml version="1.0"?> <xml_api_reply version="1"> <cities> < ...

  4. 南阳理工ACM——106背包问题

    描述: 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10):如果给你一个背包它能容纳的重量为m(10<=m<=20),你 ...

  5. ZigBee安全相关

    ZigBee安全由AES加密算法和CCM操作方式作为安全方案,广泛使用在ZigBee联盟的通信协议中.ZDO层负责安全策略和安全配置的管理. Technorati 标签: ZigBee 安全 2. 配 ...

  6. 自动化测试平台CATP

    CATP:报文类工具,可以测试功能

  7. 【风马一族_xml】xml的基本讲解笔记

    xml是如何保存数据的 在xml语言中,它允许用户自定义标签.每个标签用于描述一段数据; 一个标签可以分为开始标签和结束标签,在开始标签和结束标签之间又可以嵌套其它标签,利用标签间的嵌套其它标签,利用 ...

  8. Code Review的一些典型内容

    如下是Code Review中一些典型的内容: 一.常规项: 1.代码能够工作么?它有没有实现预期的功能,逻辑是否正确等. 2.所有的代码是否简单易懂? 3.代码符合你所遵循的编程规范么?这通常包括大 ...

  9. Linux下iftop网卡流量监控使用

    在类linux系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用netstat.nmap等工具.若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop. 一.i ...

  10. C#操作系统日志

    系统日志可以帮助我们分析操作系统的安全与否,也可以帮助我们将一些不好调试的信息显示出来. C#操作系统日志主要是通过EventLog类来实现的. 一 图解 打开事件查看器,其中与EventLog类对应 ...