NC234153. 小红的删数字
描述
输入描述
一个正整数 。
数据范围:
输出描述
若小红获胜,则输出"kou"
否则输出"yukari"
示例1
输入:
13
输出:
kou
说明:
小红可以先删掉1使数字变为3,而此刻小紫不可以再删,故小红胜利。示例2
输入:
1024
输出:
yukari
说明:
小红第一次可以删掉1或者4。C++(g++ 7.5.0) 解法, 执行用时: 6ms, 内存消耗: 652K, 提交时间: 2022-11-22 20:17:18
#include<bits/stdc++.h> using namespace std; int tong[3]; int main(){ int n,x,i,sum = 0; string s; cin >> s; for(i=0;i<s.length();++i){ if(s[i]-'0') tong[(s[i]-'0')%3]++; sum += s[i]-'0'; } if(!tong[sum%3]) { cout << "yukari"; return 0; } tong[sum % 3]--; if(tong[1] == tong[2] && tong[0]) cout<<"kou"; else cout<<"yukari"; }
Python3 解法, 执行用时: 86ms, 内存消耗: 5480K, 提交时间: 2022-09-21 09:19:35
from collections import Counter s = input().strip() ns = [int(c)%3 for c in s if c != '0'] cnt = Counter(ns) Sum = sum(ns) def main(): if cnt[Sum % 3] == 0: return 'yukari' cnt[Sum % 3] -= 1 if cnt[1]==cnt[2] and cnt[0]>0: return 'kou' else: return 'yukari' print(main())
C++ 解法, 执行用时: 5ms, 内存消耗: 524K, 提交时间: 2022-06-14 22:59:11
#include<cstdio> int x,n[3],p; char s[100005]; int main(){ scanf("%s",s); for(int i=0;s[i];i++){ p=(p*10+s[i]-'0')%3; if(s[i]=='0') continue; ++n[(s[i]-'0')%3]; } if(!n[p]) goto B; --n[p]; if(n[1]==n[2]&&n[0]) goto A; goto B; A: puts("kou"); return 0; B: puts("yukari"); return 0; }