題目理解:輸入乙個等式,判斷在(2~16)進製之內是否成立,成立則輸出對應進製(多個滿足輸出最小),不成立輸出-1。
參考隊內的ac**,在自己的理解下稍微改動,整體思路是參考的。
具體解釋見**
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define n 6000005
#define m 100
#define ll long long
#define mod 998244353
using
namespace std;
string num1,num2,num3;
string num[3]
;bool flag;
inttrans
(string a,
int n)
return sum;
}void
solve
(char op)
st=max(st,max_num+1)
;//通過上述操作可以使st從最大可能的進製開始,而不是從2開始,這樣可以使時間複雜度減少
for(
int i = st; i <= end; i++
)break;}
case
'-':
break;}
case
'*':
break;}
case
'/':
break;}
}}printf (
"-1");
return;}
intmain()
}solve
(op)
;puts(""
);}}
對於我來說,我認為最難想到的是
int max_num=0;
for(
int i=
0;ilength()
;i++
) st=
max(st,max_num+1)
;//通過上述操作可以使st從最大可能的進製開始,而不是從2開始,這樣可以使時間複雜度減少
如果是我可能直接從2開始查詢。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define m 100
#define ll long long
using
namespace std;
intmain()
return0;
}
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define m 100
#define ll long long
using
namespace std;
const
int n=
200005
;const
int mod=
1e9+7;
ll a[n]
,s[n]
;ll quick
(ll a, ll b)
return ans % mod;
}long
long
inv(
long
long a)
intmain()
ll k=
0,ans=0;
for(
int i=
1;i<=n/
2;i++)if
(n%2!=0
) ans=
(ans*
inv(
(ll)n*
(n+1)/
2%mod)
)%mod;
//n*(n+1)/2是參與分子計算的總個數,注意前面要加(ll)(從隊友那學來的,開始沒加就wa了)
printf
("%lld\n"
,ans);}
}
dp[i][j][val]:[i,j]區間內是否能計算出valval。
於是可得轉移方程:
dp[i][j][v1+v2]=dp[i][mid][v1]+dp[mid+1][j][v2]
dp[i][j][v1∗v2]=dp[i][mid][v1]*dp[mid+1][j][v2]
上述轉移方程參考部落格:參考
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define max 0x3f3f3f
#define ll long long
using
namespace std;
const
int n=
5050
;int re[n]
;string s=
" 1145141919114514191911451419191145141919"
;set<
int> dp[20]
[20];
void
dfs(
int l,
int r)
if(num<=
5000
) dp[l]
[r].
insert
(num);}
for(
int i=l;i
}}intmain()
} re[3]
=re[7]
=-1;
//根據題解只有當n=3和n=7時輸出-1
int t;
scanf
("%d"
,&t)
;while
(t--
)}
杭電多校第六場(IF)
題意 有命題 將 b 進製數y按位相加,迴圈無窮次,最終結果若 x 0,則有y x 0,反之不然 給出b和x,判斷命題是否成立 打表發現的b x 1時成立,看到有數論大佬推出來的 想看推導的右轉 includeusing namespace std typedef unsigned long lon...
20190807杭電多校第六場
賽中和隊友一直在搞乙個胡搞做法,艱難優化到本地跑10s,可惜始終過不了。最後只好補了題解做法。倒著刪除,用樹狀陣列求lis,維護一條當前的lis的路徑。若被刪除的數不在當前的lis中,則答案不變 否則,重新做一遍lis。據說因為lis的期望長度為sqrt n 所以被選中的概率是 ac include...
2019 杭電多校(第六場)
1005 snowy smile 線段樹 題意給你n個點 讓你畫個矩形 使矩形內所含點的權值和最大 必須有點 思路離散化 列舉矩形的左右區間 線段樹維護y座標的最大欄位和 複雜度 o n n lgn include using namespace std typedef long long ll c...