终于AK了,虽然第三题主要是搞月想出来的
T1:
n个1*1的小方块,把这些小方块拼成一个图形,使这个图形周长最小
思路:
枚举拼成长方形的长为i,宽为n/i
可得面积 (i+n/i+(bool)(n%i))*2
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cmath> 6 #include<cstring> 7 #include<queue> 8 #include<vector> 9 #include<map> 10 #define ll long long 11 #define inf 200000000000000LL 12 #define MAXN 100100 13 using namespace std; 14 inline ll read() 15 { 16 ll x=0,f=1;char ch=getchar(); 17 while(!isdigit(ch)) {if(ch=='-') f=-1,ch=getchar();} 18 while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();} 19 return x*f; 20 } 21 ll T,n,ans,x; 22 int main() 23 { 24 freopen("block.in","r",stdin); 25 freopen("block.out","w",stdout); 26 T=read(); 27 while(T--) 28 { 29 n=read(),ans=inf,x=sqrt(n); 30 for(ll i=1;i<=x;i++) 31 { 32 ans=min(ans,(i+n/i+(bool)(n%i))*2); 33 } 34 printf("%lld\n",ans); 35 } 36 }