orz orz AK爷 红名爷
论如何爆成120。。。。。
首先是如何B题拿20分
惊讶地发现只有20分
一番魔改之后
让我们看看发生了什么吧!!!
MDZZ,输出个毛线标记啊!
然后我们还是发现,有一个点T掉了????
交了一发网上搜到的代码,A掉了!!!
可我一交,第二个点还是T了。。。。
拷来了第二个点的数据,我忍不住再说一句:MDZZ
第七个人的父母呢??被吃了??让我一个开了读入优化的情何以堪!!删了读入优化就瞬间A掉了。
(论如何爆掉70分)
第三题。。。。
再给我10分钟!!!!
16:00考试结束,再爆85分。
那么问题来了,还有15分哪去了??
我又拷来了数据
嗯,四个很大的一样大的矩形。
看看代码,
这不是搞笑吗?,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掉得简直不能看了