ACM-ICPC 2017 沈阳赛区现场赛 G. Infinite Fraction Path && HDU 6223

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6223

参考题解:https://blog.csdn.net/qq_40482495/article/details/78492841

注意优先队列自定义比较级的用法!!

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define ull unsigned long long
 5 #define mst(a,b) memset((a),(b),sizeof(a))
 6 #define mp(a,b) make_pair(a,b)
 7 #define pi acos(-1)
 8 #define pii pair<int,int>
 9 #define pb push_back
10 const int INF = 0x3f3f3f3f;
11 const double eps = 1e-6;
12 const int MAXN = 15e4 + 10;
13 const int MAXM = 2e6 + 10;
14
15 char s[MAXN];
16 int a[MAXN], ans[MAXN], vis[MAXN], nex[MAXN];
17
18 struct node {
19     int pos,val,dep;
20 };
21
22 struct cmp {
23     bool operator()(const node &x,const node &y) {
24         if(x.dep != y.dep) return x.dep > y.dep;
25         else if(x.val != y.val) return x.val < y.val;
26         return x.pos < y.pos;
27     }
28 };
29
30 int main() {
31 #ifdef local
32     freopen("data.txt", "r", stdin);
33 #endif
34     int cas = 1;
35     int t;
36     scanf("%d",&t);
37     while(t--) {
38         int n;
39         scanf("%d",&n);
40         scanf("%s",s);
41         int mx = 0;
42         for(int i = 0; i < n; i++) {
43             ans[i] = vis[i] = -1;
44             a[i] = s[i] - ‘0‘;
45             mx = max(mx, a[i]);
46             nex[i] = (1ll * i * i + 1) % n;
47         }
48         priority_queue<node, vector<node>, cmp >q;
49         for(int i = 0; i < n; i++)
50             if(a[i] == mx) q.push({i,a[i],0});
51         while(!q.empty()) {
52             node now = q.top();
53             q.pop();
54             int pos = now.pos, val = now.val, dep = now.dep;
55             if(dep >= n) break;
56             if(ans[dep] > val) continue;
57             else if(ans[dep] == val && vis[pos] == dep) continue;
58             ans[dep] = val, vis[pos] = dep;
59             q.push({nex[pos],a[nex[pos]],dep + 1});
60         }
61         printf("Case #%d: ",cas++);
62         for(int i = 0; i < n; i++) printf("%d",ans[i]);
63         printf("\n");
64     }
65     return 0;
66 }

原文地址:https://www.cnblogs.com/scaulok/p/9744004.html

时间: 2024-11-09 01:49:56

ACM-ICPC 2017 沈阳赛区现场赛 G. Infinite Fraction Path && HDU 6223的相关文章

ACM-ICPC 2017 沈阳赛区现场赛 M. Wandering Robots &amp;&amp; HDU 6229

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6229 参考题解:https://blog.csdn.net/lifelikes/article/details/78452558     https://www.cnblogs.com/cxhscst2/p/8215717.html 1 #include <bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define

2014ACM/ICPC亚洲区鞍山赛区现场赛——题目重现

2014ACM/ICPC亚洲区鞍山赛区现场赛--题目重现 题目链接 5小时内就搞了5题B.C.D.E,I. H题想到要打表搞了,可惜时间不够,后面打出表试了几下过了- - K题过的人也比较多,感觉是个几何旋转+ploya,但是几何实在不行没什么想法 B:这题就是一个大模拟,直接数组去模拟即可,注意细节就能过 C:类似大白上一题红蓝三角形的, 每个数字找一个互质和一个不互质个数,除掉重复就直接除2,然后总的C(n, 3)减去即可,问题在怎么处理一个数字互质和不互质的,其实只要处理出不互质的即可,这

2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5984 Pocky 题意 给出一根棒子(可以吃的)的长度x和切割过程中不能小于的长度d,每次随机的选取一个位置切开,吃掉左边的一半,对右边的棒子同样操作,直至剩余的长度不大于d时停止.现在给出x和d,问切割次数的数学期望是多少. 解题思路 当看到第二个样例2 1时,结果是1.693147,联想到ln

hdu 5956 The Elder 2016ACM/ICPC沈阳赛区现场赛I

Problem Description Once upon a time, in the mystical continent, there is a frog kingdom, ruled by the oldest frog, the Elder. The kingdom consists of N cities, numbered from east to west. The 1-th city, which is located to the east of others, is the

ACM总结——2017ACM-ICPC北京赛区现场赛总结

现在距离比赛结束已经过了一个多星期了,也是终于有时间写下心得了.回来就是被压着做项目,也是够够的. 这次比赛一样是我和两个学弟(虽然是学弟,但我的实力才是最弱的T_T)一起参加的,成绩的话打铁,算是情理之中意料之外了,我们本来以为自己会在北京赛区拿个倒数20什么的(比赛前听说北京赛区是最难的),事实上虽然不是很简单,但是也绝对没有想象中难(以为会A1或者零来着). 说下比赛前吧~赛前一星期是软考,所有自己训练很少,也正是这样,这场比赛算是抱了大腿(自己太菜了..)!咳咳~虽然软考复习了两周,但是

2014ACM/ICPC亚洲区鞍山赛区现场赛1009Osu!

鞍山的签到题,求两点之间的距离除以时间的最大值.直接暴力过的. A - Osu! Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 5078 Appoint description:  System Crawler  (2014-10-22) Description Osu! is a very popular music game. B

HDU6223 &amp;&amp; 2017沈阳ICPC: G. Infinite Fraction Path——特殊图&amp;&amp;暴力

题意 给定一个数字串,每个位子都能向(i*i+1)%n的位子转移,输出在路径上.字典序最大的.长度为n的串($n \leq 150000$). 分析 先考虑一个暴力的方法,考虑暴力每个x,然后O(n)判定形成的字符串字典序是否比当前的最优解要大,复杂度O(n²),显然大家都会做. 而本题中有个结论:没有必要每次O(n),只要前100个字符一样,那么后面的一定都一样!所以>500直接break,复杂度O(500n), 可以过! 理解:对于所有的下标k,k向(k*k+1)%n连一条有向边,最后可以得

HDU6223——2017ICPC徐州G Infinite Fraction Path

题意: 给定一个数字串,每个位子都能向(i*i+1)%n的位子转移,输出路径上,字典序最大的,长度为n的串. 参考:https://www.cnblogs.com/mountaink/p/9541442.html 思路: BFS, 一个数字肯定是最高位越大,这个数字本身就越大,所以肯定第一位要取最大值,在这一位取最大值的时候后面每一位都要尽量最大,所以想到bfs. 但是bfs肯定要剪枝,怎么剪枝呢? 1.按照思路,我要取每一位尽可能大的值,所以某一个状态的某一位小于我当前以及有的解,这个状态肯定

hdu5512 Pagodas(2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学) )

Pagodas Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 14 Accepted Submission(s): 13 Problem Description n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai M