2023年度訓練聯盟熱身訓練賽第一場 C

2021-10-21 17:13:47 字數 1377 閱讀 4994

給你乙個數n,求最小的數x使得x的平方等於n,運算過程中只以個位作為有效數字,比如正常情況4×4=16,在這裡4×4=6;正常情況17×17=289,在這裡17×17=149.

首先寫一下乘法豎式。

1、首先可以發現,得到的答案的位數一定是乙個奇數,而且是x的位數乘2加1,所以答案位數一定是偶數。那麼如果n的位數+1是乙個奇數,一定找不到x。

2、再來看能找的情況,我們假設n有p位,那麼x就有k = (p+1)/2位,可以發現通過列舉n的最高位(稱它為第1位)可以找到符合的a,然後依次向後搜尋到n的第k位就可以確定abcd四個數字,也就是x的值,然後再通過餘下的幾位來驗算是否可行。

3、可以發現每一位的值,都是交叉相乘相加後取餘,如果第3位,就是1×3,2×2,1×3(這裡的1,2,3表示下標)。

1、因為要找到最小的x,所以從最高位開始搜尋,一旦找到直接return。

2、n的位數最多有25位。

#include 

.h>

#define ll long long

#define t int t

;scanf

("%d",&

t);while(t

--)using namespace std;

const int mod =

998244353

;const int maxn =

2e5+10;

string s;

int k;

//x的位數

int a[30]

;//存x的每一位

int ok =0;

//標記是否找到

vector ans;

void

dfs(int x)

if(cnt != s[i]

-'0')}

if(f)

}return;}

for(int i =

0; i <

10; i++

)// cout << "=== " << x <

(cnt==s[x]

-'0')}

}int main()

k =(s.size()

+1)/

2;dfs(0)

;if(ok)

for(auto i : ans) cout << i;

else cout <

<< endl;

return0;

}

2023年度訓練聯盟熱身訓練賽第三場(IJ)

傳送門 題意 你有一輛輪胎會跑氣的自行車,打滿一次氣可以走的距離是d,一開始自行車的氣是滿的,城市中有 n 個點,你要從1點到 n 點,其中有 t 個點處可以給自行車打氣,你只能在自行車有氣的時候走,問從1到 n 的最短路 思路 先跑一遍floyd求出每兩點之間的最短路,然後重新構圖,兩個打氣點之間...

2023年度訓練聯盟熱身訓練賽第一場

鏈結 題意 給定若干個空間中的點,求從三個標準空間直角座標平面進去能夠全部覆蓋這些點的最小半徑 題解 注意 includeusing namespace std define n 1e5 5 define inf 99999999 define eps 1e 6 define powe x x x ...

牛客2023年度訓練聯盟熱身訓練賽第一場E題

知識點 單調棧 ac include include include using namespace std int a 200005 int vis 200010 int last 200005 int s 200005 int top intmain for int i 1 i k i for ...