1. 程式人生 > >記一次unhappy考試(10.5)

記一次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掉得簡直不能看了