这题看起来难,题面有点长,读懂就是水题一个了。
题意:有两个人:JOJO 和 Dio 玩游戏 两个人各自有n长度的字符串,以及相同的血量h
现从1开始遍历字符串,当 JOJO 有连续的后缀字符是ora 那么就会施法使得Dio 血量减一
当Dio有连续的后缀字符是muda 那么就会施法使得JOJO 血量减一
当Dio有连续的后缀字符是zawaluduo 会使得JOJO瞬间没血
当JOJO有连续的后缀字符是zawaluduo 会使得Dio瞬间没血
如果同时发现zawaluduo 优先执行JOJO的。
判断最后谁赢了
做法:模拟一下就可以了。
#include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=(b);++i) #define per(i,a,b) for(int i=a;i>=(b);--i) #define mem(a,x) memset(a,x,sizeof(a)) #define pb push_back #define pi pair<int, int> #define mk make_pair using namespace std; typedef long long ll; ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} const int N=2e4+10; char s[N],t[N]; int n,h1,h2; void solve() { scanf("%d%d",&n,&h1); cin>>s+1>>t+1; h2=h1; int flag; string tmp="zawaluduo"; for(int i=3;i<=n&&h1&&h2;++i){ if(i>=9) { int f=1; for(int j=0,k=i-8;j<9;++j,++k) if(t[k]!=tmp[j]) f=0; if(f) { h1=0;break; } f=1; for(int j=0,k=i-8;j<9;++j,++k) if(s[k]!=tmp[j]) f=0; if(f) { h2=0;break; } } if(s[i-2]=='o'&&s[i-1]=='r'&&s[i]=='a') h2--; if(i<4)continue; if(t[i-3]=='m'&&t[i-2]=='u'&&t[i-1]=='d'&&t[i]=='a') h1--; } if(h1>h2) puts("Wryyyyy"); else if(h2>h1) puts("Hinnjaku"); else puts("Kono Dio da"); } int main() { //ios::sync_with_stdio(false); //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int _;cin>>_;while(_--) solve(); }