欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 4028 The time of a day STL 模拟题

发布时间:2023/12/19 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 HDU 4028 The time of a day STL 模拟题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

暴力出奇迹。。

#include<stdio.h> #include<iostream> #include<algorithm> #include<vector> #include<cmath> #include<queue> #include<set> #include<map> using namespace std; #define ll __int64 #define N 42 ll n,m,ans; ll Gcd(ll x,ll y){if(x>y)swap(x,y);while(x){y%=x;swap(x,y);}return y; } ll Lcp(ll x,ll y){return x*y/Gcd(x,y);} map<ll,ll>mp[N]; map<ll,ll>::iterator p; pair<ll,ll>tmp; void work(ll x, ll cur){p = mp[cur].end();if(p==mp[cur].begin())return;p--;for(;;p--){tmp = *p;ll dou = Lcp(tmp.first,x);if(dou>=m){ans += tmp.second;}mp[cur][dou]+=tmp.second;if(p==mp[cur].begin())return;} } struct node{ll num, ans;bool operator<(const node&a)const{return a.num>num;} }; set<node>myset[N]; int main(){ll i, j, Cas = 1, T;scanf("%I64d",&T);mp[0].clear();for(i=1;i<=40;i++){mp[i] = mp[i-1];work(i,i);mp[i][i]++;node now = {0,0};myset[i].clear();for(p=mp[i].end(),p--;;p--){tmp = *p;now.num = tmp.first;now.ans += tmp.second;myset[i].insert(now);if(p==mp[i].begin())break;}}while(T--){scanf("%I64d %I64d",&n,&m);printf("Case #%I64d: ",Cas++);node dou = {m,-1};if(myset[n].lower_bound(dou)==myset[n].end())puts("0");else printf("%I64d\n",myset[n].lower_bound(dou)->ans);}return 0; }

转载于:https://www.cnblogs.com/mfrbuaa/p/5088444.html

总结

以上是生活随笔为你收集整理的HDU 4028 The time of a day STL 模拟题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。