預處理一下平方數(還是第一次開2e8的陣列),然後暴力判斷一下就好,注意只需要列舉一半即可,例如13=4+9,如果列舉到9+4那麼顯然就重複了。
// #pragma gcc optimize(2)
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define io \
ios::sync_with_stdio(false); \
// cout.tie(0);
using namespace std;
// int dis[8][2] = ;
typedef unsigned long long ull;
typedef long long ll;
typedef pairp;
const int maxn = 1e8 + 10;
const int maxm = 2e5 + 10;
const ll inf = 0x3f3f3f3f3f3f3f3f;
const int inf = 0x3f3f3f3f;
const ll mod = 1e9 + 7;
const double eps = 1e-8;
const double pi = acos(-1);
int dis[4][2] = ;
//int m[13] = ;
bool sq[maxn];
ll num[maxn];
bool check(ll val)
}return cnt == 12;
}int main()
for(ll i=1106;;i++)
{ if(check(i))
{ cout<答案是:160225
藍橋杯 邊界為1的最大子方陣(預處理)
其中,邊框全是1的最大正方形的大小是4 4,故返回4。這道題我之前還寫過一篇採用暴力搜尋法來解決的,但是時間複雜度比較大o n 4 可能會超時,沒看過的小夥伴可以看下 暴力搜尋版 此處我們先對這個矩陣進行預處理,有點類似於動態規劃,思路就是新建乙個n n 2的三維陣列,其中規定,每乙個元素如果是1,...
藍橋杯 轉方陣
對乙個方陣轉置,就是把原來的行號變列號,原來的列號變行號 例如,如下的方陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 轉置後變為 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 但,如果是對該方陣順時針旋轉 不是轉置 卻是如下結果 1...
藍橋杯 轉方陣
對乙個方陣轉置,就是把原來的行號變列號,原來的列號變行號 例如,如下的方陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 轉置後變為 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 但,如果是對該方陣順時針旋轉 不是轉置 卻是如下結果 1...