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. .net 调用webservice 总结

    最近做一个项目,由于是在别人框架里开发app,导致了很多限制,其中一个就是不能直接引用webservice . 我们都知道,调用webserivice 最简单的方法就是在 "引用" ...

  2. cetos 7 常用命令

    1. 安装 yum install 2. 可安装查找  yum search 3. 查找文件  whereis 4. 查看文件cat 5. 修改文件vi

  3. 【学习笔记】【C语言】sizeof

    1.用来计算一个变量或者一个常量.一种数据类型所占的内存字节数. 2.sizeof一共有3种形式 1>sizeof( 变量\常量 ) sizeof(10); char c = 'a'; size ...

  4. AMQ学习笔记 - 20. 使用Apache ActiveMQBrowser监控ActiveMQ

    概述 Apache ActiveMQBrowser可以用于查看AMQ中的消息.这里对其使用方法进行简单介绍. 使用介绍 1.下载并解压缩 下载地址:Apache ActiveMQBrowser,当前最 ...

  5. 20140213-想念是while里的死循环

    // stdafx.h : 标准系统包含文件的包含文件,// 或是经常使用但不常更改的// 特定于项目的包含文件// #pragma once#include "targetver.h&qu ...

  6. Linux 静态库与动态库搜索路径设置详解【转】

    原文地址:http://blog.chinaunix.net/uid-29025972-id-3855495.html 1. 连接和运行时库文件搜索路径的设置 库文件在连接(静态库和共享库)和运行(仅 ...

  7. android 数据库_sql语句总结

    表的创建db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20)") ...

  8. NDK 通过java调用so文件

    首先我们来看so文件的来源 1. 自己写.c文件,然后生成so库 2. 引用别人的静态库,或者动态库来生成新的jni调用库. 我们先来看最简单的编写一个jni调用的so库,包含一个获取字符串的方法,通 ...

  9. Easyui datebox控件打开页面就验证解决方法

    问题描述: datebox时间控件有些场景下默认值需要为空,但是为空的情况下打开页面会自动验证,十分影响美观. 实现原理: <input class="easyui-databox&q ...

  10. webview的弹性布局之rem,em

    webview页面的自适应一般有两种方法,即一是JS的计算方法,二是通过css的media设置分档方式.在此主要介绍css的方式. html { font-size: 16px; } @media o ...