# Python a = input().split() r = 2 for x in a: r = min(r,3-a.count(x)) r = min(r,(not x.replace(x[0],chr(ord(x[0])+1),1) in a)+(not x.replace(x[0],chr(ord(x[0])+2),1) in a)) r = min(r,(not x.replace(x[0],chr(ord(x[0])-1),1) in a)+(not x.replace(x[0],chr(ord(x[0])+1),1) in a)) print(r)
这里是不需要特判边界的,因为超了边界(面值大于9的ASCII码)在a里面一定是找不到的。
为了避免replace这一长串尴尬的代码,可以枚举牌面而不是枚举这三张牌:
1 2 3 4 5 6 7 8
# Python a = input().split() r = 2 for i in range(48,58): for c in"mps": r = min(r,3-a.count(chr(i)+c)) r = min(r,3-(chr(i-1)+c in a)-(chr(i)+c in a)-(chr(i+1)+c in a)) print(r)
这里的48和58代表'0'和'9'+1,因为range()是左闭右开区间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// C++ #include<bits/stdc++.h> usingnamespacestd;
#define rint register int inlineintrf(){int r;int s=0,c;for(;!isdigit(c=getchar());s=c);for(r=c^48;isdigit(c=getchar());(r*=10)+=c^48);return s^45?r:-r;} string a, b, c, f = "mps", i = "xx"; int r = 2; intmain() { cin >> a >> b >> c; for(i[0] = '0'; i[0] <= '9'; i[0]++) for(int j = 0, t; j < 3; j++) i[1] = f[j], r = min(r,3-(a==i)-(b==i)-(c==i)), t = 3, t -= (a==i)||(b==i)||(c==i), i[0]++, t -= (a==i)||(b==i)||(c==i), i[0]++, t -= (a==i)||(b==i)||(c==i), i[0] -= 2, r = min(r,t); return !printf("%d\n",r); }
# Python O(m log m) n,m,k = [int(i) for i in input().split()] p = [int(i) for i in input().split()] c = 1 i = 0 A = 0 while i < len(p): R = ((p[i]-c)//k+1)*k+c lef = i+1 rig = len(p) while lef < rig: mid = (lef+rig)//2 if p[mid] < R: lef = mid+1 else: rig = mid c += lef-i i = lef A += 1 print(A)
~~辣鸡Python这都能TLE。~~所以还是要写一个单调指针:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# Python O(m) n,m,k = [int(i) for i in input().split()] p = [int(i) for i in input().split()] c = 1 i = 0 A = 0 while i < m: R = ((p[i]-c)//k+1)*k+c j = i+1 while j < m and p[j] < R: j += 1 c += j-i i = j A += 1 print(A)
这个运行速度大约是280ms。我们来看看C++。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// C++ O(m log m) #include<bits/stdc++.h> usingnamespacestd; #define ll long long #define rint register int inline ll rf(){ll r;int s=0,c;for(;!isdigit(c=getchar());s=c);for(r=c^48;isdigit(c=getchar());(r*=10)+=c^48);return s^45?r:-r;} ll p[100005], c = 1, A, m, k; intmain() { rf(); m = rf(); k = rf(); generate(p+1,p+m+1,rf); for(rint i = 1, j; i <= m; c += j-i, i = j, A++) j = lower_bound(p+i+1,p+m+1,((p[i]-c)/k+1)*k+c)-p; return !printf("%d\n",A); }
// C++ O(m) #include<bits/stdc++.h> usingnamespacestd; #define ll long long #define rint register int inline ll rf(){ll r;int s=0,c;for(;!isdigit(c=getchar());s=c);for(r=c^48;isdigit(c=getchar());(r*=10)+=c^48);return s^45?r:-r;} ll p[100005], c = 1, A, m, k, R; intmain() { rf(); m = rf(); k = rf(); generate(p+1,p+m+1,rf); for(rint i = 1, j; i <= m; c += j-i, i = j, A++) for(j = i+1, R = ((p[i]-c)/k+1)*k+c; j <= m && p[j] < R; j++); return !printf("%d\n",A); }
# Python import sys n = int(input()) a = sorted([int(i) for i in input().split()]) t = 0 for i in range(1,n): t += a[i]==a[i-1] if t >= 2: print("cslnb") sys.exit(0) if t: for i in range(n): if a[i]==a[i+1]: if a[i] and a[i]!=a[i-1]+1: a[i] -= 1 break else: print("cslnb") sys.exit(0) print(["cslnb","sjfnb"][(sum(a)-t-n*(n-1)//2)&1])
这么长一坨居然是最短代码。
然后贴下C++代码,注意puts()返回值本来就是是0。
1 2 3 4 5 6 7 8 9 10 11 12 13
// C++ #include<bits/stdc++.h> usingnamespacestd;
#define rint register int inlineintrf(){int r;int s=0,c;for(;!isdigit(c=getchar());s=c);for(r=c^48;isdigit(c=getchar());(r*=10)+=c^48);return s^45?r:-r;} int n, t; longlong a[100005]; char Ans[2][6] = {"cslnb","sjfnb"}; intmain() { n = rf(); generate(a+1,a+n+1,rf); sort(a+1,a+n+1); for(rint i = 2; i <= n; t += a[i]==a[i-1], i++); if(t>=2) returnputs("cslnb"); a[0] = -2; if(t) for(rint i = 1; i <= n; i++) if(a[i]==a[i+1]){if(a[i]&&a[i]!=a[i-1]+1){a[i]--; break;} elsereturnputs("cslnb");} returnputs(Ans[(accumulate(a+1,a+n+1,0ll)-t-n*(n-1ll)/2)&1]); }
# Python import sys defCheck(): for j in [0,1]: if R[j][1] + L[j][n] + k >= n: return1 return0 n,k = [int(i) for i in input().split()] S = [int(i) for i in input()] R = [[0]*(n+2),[0]*(n+2)] L = [[0]*(n+2),[0]*(n+2)] for j in [0,1]: for i in range(n): if S[i]==j: L[j][i+1] = L[j][i]+1 for i in range(n-1,-1,-1): if S[i]==j: R[j][i+1] = R[j][i+2]+1 if Check(): print("tokitsukaze") sys.exit(0) for j in [0,1]: for r in range(k,n+1): l = r-k+1 t = [R[j][1],L[j][n],R[j^1][1],L[j^1][n]] if R[j][1] >= l-1: R[j][1] = r+R[j][r+1] if L[j][n] >= n-r: L[j][n] = n-l+1+L[j][l-1] if R[j^1][1] > l-1: R[j^1][1] = l-1 if L[j^1][n] > n-r: L[j^1][n] = n-r ifnot Check(): print("once again") sys.exit(0) R[j][1],L[j][n],R[j^1][1],L[j^1][n] = t print("quailty")
# Python TLE import sys defAdd(i,v): i = n-i+1 while i <= n: c[i] += v i += i&-i defSum(i): r = 0 i = n-i+1 while i: r += c[i] i -= i&-i return r n = int(input()) a = [] for i in sys.stdin: x,y = map(int,i.split()) a.append((x,y,0,0)) a.sort(key=lambda x:x[1]) t = [a[0][1]] a[0][1] = 1 for i in range(1,n): t.append(a[i][1]) a[i][1] = a[i-1][1]+(t[i]!=t[i-1]) a.sort(key=lambda x:(x[0],x[1])) c = [0] * (n+1) for i in range(n): if i and a[i][0]==a[i-1][0]: Add(a[i-1][1],-1) Add(a[i][1],1) a[i][2] = Sum(a[i][1]) a.sort(key=lambda x:(-x[0],x[1])) c = [0] * (n+1) for i in range(n): if i and a[i][0]==a[i-1][0]: Add(a[i-1][1],-1) Add(a[i][1],1) a[i][3] = Sum(a[i][1]) a.sort(key=lambda x:(x[1],x[0])) for i in range(n-1): if a[i][1]==a[i+1][1]: a[i][3] -= a[i+1][3] print(sum([v[2]*v[3] for v in a]))