记一次unhappy考试(10.5)

orz orz AK爷 红名爷

爆零自动机

论如何爆成120。。。。。

首先是如何B题拿20分
惊讶地发现只有20分

B题罗干

一番魔改之后

B题罗罗干

让我们看看发生了什么吧!!!

B题罗罗罗干

MDZZ,输出个毛线标记啊!
然后我们还是发现,有一个点T掉了????
交了一发网上搜到的代码,A掉了!!!
可我一交,第二个点还是T了。。。。
拷来了第二个点的数据,我忍不住再说一句:MDZZ

zz数据

第七个人的父母呢??被吃了??让我一个开了读入优化的情何以堪!!删了读入优化就瞬间A掉了。
(论如何爆掉70分)

第三题。。。。
再给我10分钟!!!!

ten more minutes

16:00考试结束,再爆85分。
那么问题来了,还有15分哪去了??
我又拷来了数据

WA数据

嗯,四个很大的一样大的矩形。
看看代码,

5000

这不是搞笑吗?,4个49*50的矩形面积会小于5000。。。。
3s时间一改,A了。(假装只掉了85分好了)

/**********************************
    (Azure)我是华丽的分割线(Azure)
**********************************/

题解时间

T1题解
简直就是在搞笑,3分钟就推出公式了,总共3种情况,
面对角线,体对角线,和边长平行的直线。体对角线肯定就只有4条不能再多了。面对角线一个面2条,一共3*n个面,总共6*n条。
和边长平行的直线,为不重复计算,计算贯穿两个对面的直线,共n*n条,一共3个两对面,所以是3*n*n。那公式就是
ans=3*n*n+6*n+4
简单粗暴,唯一可以坑人的地方什么n=1或者高精都没有。
(小插曲:内存限制10M,刚开始用bits/stdc++.h的统统RE)
代码如下:

#include <cstdio>
using namespace std;
int n;
int main(){
    //freopen("tictac.in","r",stdin);
    //freopen("tictac.out","w",stdout);
    scanf("%d",&n);
    if(n==1) return puts("1"),0;
    printf("%d",3*n*n+6*n+4);
    return 0;
} 

T2题解
树形DP,硬上就好了,把算过的答案记下来,打上标记,
碰到直接用,然后细节注意某些东西=0或者=1的情况。还有就是不要把标记return出去(尴尬脸)。
代码如下:

#include <cstdio>
#include <iostream>
#define G ch=getchar()
#define M 110
#define inf 10000010
using namespace std;
int rp[M],l[M],r[M],f[M][M];bool g[M][M];
int n,i,j,k;
inline int read(){
    int x=0,f=1;char G;
    while(ch<48||ch>57){if(ch=='-') f=-1;G;}
    while(ch>47&&ch<58) x=x*10+ch-48,G;return x*f;
}
int dp(int x,int k){
    if(g[x][k]) return f[x][k];
    if(k==0) return f[x][k]=0;
    if(x==0) return f[x][k]=-inf;
    if(k==1) return f[x][k]=rp[x];
    int mx=-inf;
    for(int t,i=0;i<k;i++){
        t=dp(l[x],i)+dp(r[x],k-i-1)+rp[x];
        if(t>mx) mx=t;
    }f[x][k]=mx;g[x][k]=1;return mx;
}
int main(){
    for(n=read(),k=read(),i=2;i<=n;i++) rp[i]=read();
    for(i=1;i<=n;i++) l[i]=read(),r[i]=read();
    printf("%d",dp(1,k+1));return 0;
}

忘了把读入优化删了,懒得删。

T3题解
分类讨论,分六种情况(实际上是五种)。
矩形
4、5是同一种,枚举每一种形态,旋转、跳跃,更新答案。可以开个数组打标记,输出答案的时候就好了。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
int i,mx=10000;
int ans[1000],ch[8],ku[8];
void swap(int *a,int *b){
    int t;t=*a;*a=*b;*b=t;
}
void rec(int x,int y){
    if(x*y<mx) mx=x*y,memset(ans,0,sizeof(ans));
    if(x*y==mx) ans[x]=ans[y]=1;
}
void cal(int a1,int b1,int a2,int b2,int a3,int b3,int a4,int b4){
    int x,y;
   //case 1:
   x=a1+a2+a3+a4;
   y=max( max(b1,b2) ,max(b3,b4) );
   rec(x,y);
   //case 2:
   x=max(a1+a2+a3,a4);
   y=max(max(b1,b2),b3)+b4;
   rec(x,y);
   //case 3:
   x=max(a1+a2,a3)+a4;
   y=max(max(b1+b3,b2+b3) ,b4);
   rec(x,y);
   //case 4:
   x=a1+a2+max(a3,a4);
   y=max(max(b1,b3+b4),b2);
   rec(x,y);
   //case 5:
   y=max(b1+b3,b2+b4);
   if(b3>=b2+b4) x=max( max(a1,a3+a2),a3+a4);
   else if( b3>b4 && b3<b2+b4 ) x=max( max(a1+a2,a2+a3),a3+a4);
   else if( b4>b3 && b4<b1+b3 ) x=max( max(a1+a2,a1+a4),a3+a4);
   else if( b4>=b1+b3)  x=max( max(a2,a1+a4) ,a3+a4);
   else if(b3==b4) x=max(a1+a2,a3+a4);
   rec(x,y);
}
inline void work(){
    for(int a=0;a<4;a++){
        swap(ch+1,ch+1+a);swap(ku+1,ku+1+a);
        for(int b=1;b<4;b++){
            swap(ch+2,ch+1+b);swap(ku+2,ku+1+b);
            for(int c=2;c<4;c++){
                swap(ch+3,ch+1+c);swap(ku+3,ku+1+c);
                for(int d=3;d<4;d++){
                    swap(ch+4,ch+1+d);swap(ku+4,ku+1+d);
    for(int e=1;e<=3;e++){
        swap(ch[1],ku[1]);
        for(int f=1;f<=3;f++){
            swap(ch[2],ku[2]);
            for(int g=1;g<=3;g++){
                swap(ch[3],ku[3]);
                for(int h=1;h<=3;h++){
                    swap(ch[4],ku[4]);
                    cal(ch[1],ku[1],ch[2],ku[2],ch[3],ku[3],ch[4],ku[4]);
           }   
         }
       }
    }swap(ch+4,ch+1+d);swap(ku+4,ku+1+d);
    }swap(ch+3,ch+1+c);swap(ku+3,ku+1+c);
    }swap(ch+2,ch+1+b);swap(ku+2,ku+1+b);
    }swap(ch+1,ch+1+a);swap(ku+1,ku+1+a); 
    }
}
int main(){
    for(i=1;i<=4;i++) scanf("%d%d",&ch[i],&ku[i]);
    work();printf("%d\n",mx);
    for(i=0;i<=(int)sqrt(mx);i++)
        if(ans[i]) printf("%d %d\n",i,mx/i);
    return 0;
}

全是Tab占空间!
不开心,rating掉得简直不能看了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值