C++算法训练第十天
以下为牛客挑战
今日收获
- 当在二维数组中,n,m的行和列改变不会影响结果时候,我们直接设置把n换成小的,再进行讨论结果。知道了最小公倍数怎么求,两个数相乘/最大公因数int lcm(int x,int y){ return x/__gcd(x,y)*y;}gcdreturn b == 0 ? a : gcd(b, a % b);c++建树vectorg(n+1);//这个是关键 for(int i=1;i>u>>v; g[u].emplace_back(v); g[v].emplace_back(u); }dfs找最大的深度int maxDepth; // 全局答案vector g; // 邻接表// 当前点 u,父节点 fa,当前深度 dvoid dfs(int u, int fa, int d){ maxDepth = max(maxDepth, d); // 更新最深 for (int v : g[u]) if (v != fa) // 防止走回父节点 dfs(v, u, d + 1);}
复制代码 牛客周赛 Round 120
无穷无尽的力量
A-无穷无尽的力量_牛客周赛 Round 120 (nowcoder.com)
解题代码
- #include#define int long long#define lll __uint128_t#define PII pair#define endl '\n'using namespace std;#define yn(ans) printf("%s\n", (ans)?"Yes":"No");//快速打印#define YN(ans) printf("%s\n", (ans)?"YES":"NO");#define REP(i, e) for (int i = 0; i < (e); ++i)#define REP1(i, s, e) for (int i = (s); i > t; while (t--)#define TESTconst int N=2e5+10,M=1e3+10,mod=1e9+7;int a[N],b[N],c[N],pre[N];signed main(){ std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=0;i n >> l >> r; string s; cin >> s; s=" "+s; vector pre(n+1); vector mi(n+1); mi[0]=1; int b=10; for(int i=1;iint{// return (pre[r]-pre[l-1]*mi[r-l+1]%mod+mod)%mod; // }; //直接算f(x) //k块完整的加上一块不完整的,这样就好算多了 int inv=ksm(mi[n]-1,mod-2); auto f=[&](int x)->int{ int k=x/n; int r=x%n; int res=mi[r]*pre[n]%mod*(ksm(b,k*n)-1+mod)%mod*inv%mod; res=(res+pre[r])%mod; return res; }; int ans=(f(r)-f(l-1)*ksm(10,r-l+1)%mod+mod)%mod; cout t; while (t--) { solve(); } return 0;}
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |