おみやげをまらいました【牛客tracker 每日一题】

发布时间:2026/6/8 20:10:18

おみやげをまらいました【牛客tracker  每日一题】 おみやげをまらいました时间限制1秒 空间限制256M知识点思维题 STL网页链接牛客tracker牛客tracker 每日一题完成每日打卡即可获得牛币。获得相应数量的牛币能在【牛币兑换中心】换取相应奖品助力每日有题做丰盈牛币日益多题目描述おみやげをまらいました蛙蛙还是给你带来了礼物。但它有个小小的要求那就是你得在石头剪刀布上赢过它才能拿到礼物哦你们这样规定有三个字符串S 1 , S 2 , S 3 S_1,S_2,S_3S1​,S2​,S3​表示三种出拳种类其中S 1 S_1S1​可以打败S 2 S_2S2​S 2 S_2S2​可以打败S 3 S_3S3​S 3 S_3S3​可以打败S 1 S_1S1​。现在根据你的观察你已经知道了蛙蛙心想的出拳顺序你需要安排自己的出拳顺序使得你能在每一局中都获胜。“焼きまんじゅう”、“ういろう”、“⽡せんべい”、“福だるま”、“⽉うさぎのボタン”……输入描述前三行每行两个字符串每行S a , S b S_a,S_bSa​,Sb​表示S a S_aSa​能打败S b S_bSb​。数据保证不互相矛盾且其中有恰好三种不同的字符串。接下去一个数N NN表示N NN次对战。接下去N NN行每行一个字符串表示蛙蛙的出拳种类。注意蛙蛙的出拳可能不合法即不是三种字符串中的这时请输出 F a k e FakeFake。输出描述共N NN行每行一个字符串表示每一局你需要出什么。如果对手出的不合法输出 F a k e FakeFake。示例1输入stone sci sci paper paper stone 4 stone sci spock paper输出paper stone Fake sci备注2 ≤ ∣ S ∣ ≤ 50 2≤∣S∣≤502≤∣S∣≤501 ≤ N ≤ 100 1≤N≤1001≤N≤100解题思路本题核心是建立循环克制的映射关系通过索引快速求解获胜出拳。题目给定固定的循环克制规则A胜B、B胜C、C胜A首先从三组输入中提取3个不重复的出拳字符串按克制顺序存储。利用索引规律简化计算若对手出拳对应索引为idx能击败它的出拳索引为(idx2)%3。处理查询时先判断蛙蛙的出拳是否在三个合法字符串中不合法直接输出Fake合法则根据索引公式快速找到对应获胜出拳并输出。全程为常数级运算逻辑极简完美适配题目约束。总结核心逻辑利用循环克制的索引规律O(1)查询能击败对手的出拳。关键操作提取3个唯一出拳字符串、建立索引映射、判断出拳合法性。效率保障固定常数级运算无冗余计算快速处理所有查询。代码内容#includebits/stdc.husingnamespacestd;#defineendl\ntypedeflonglongll;typedefunsignedlonglongull;typedefvectorvectorllvvt;typedefpairll,llpll;constll N1e310;constll INF1e18;constll M1e610;constll mod1e97;intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);chars[3][51]{,,},t[51];scanf(%s %s,s[0],s[1]);for(ll i0;i4;i){scanf(%s,t);if(strcmp(s[0],t)!0strcmp(s[1],t)!0)strcpy(s[2],t);}ll n;scanf(%lld,n);for(ll i0;in;i){scanf(%s,t);ll idx-1;for(ll j0;j3;j)if(strcmp(s[j],t)0){idxj;break;}if(idx-1)printf(Fake\n);elseprintf(%s\n,s[(idx2)%3]);}return0;}

相关新闻