A、B都是伪代码
A.排队:
是个水题吧,但是可以优化一小下:
/**
Code:
**/
read(n)
for(int i=1;i<=n;i++) read(a[i])
for(int i=1;i<=m;i++){
if(!vis[a[i]]{
for(int i=1;i<=n;i++){
vis[k] = 1;
}
}
}
ll ans = 0;
for(int i=1;i<=n;i++){
if(!vis[i]) ans++;
}
out(ans)
B.开关:
从后向前考虑
之后考虑用位运算进行优化
鬼知道rk1的0ms怎么来的
scanf("%s",s+1);
int cot = 0,ans = 0;
for(int i=1;i<=len;i++){
int x = s[i]-'0';
x^=cot;
if(x){
ans++;
cot^=1;
}
}
out(ans)
C.字符串:
首先考虑s串在t串中的位置
所以枚举t中每个字符当作s的起始位置,那么只需要判断一下所有的字母出现次数相同即可
之后判断这个子串是否出现过,可以map 当然可以再次取余降到数组大小
最后的优化:
运用滑动窗口将其优化到O(n)
rk1这个0ms真实个鬼
Code:
/*** keep hungry and calm CoolGuang!***/
#pragma GCC optimize(2)
#include <bits/stdc++.h>
#include<iostream>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pp;
const ll INF=1e17;
const int Maxn=2e7+10;
const int maxn =2e5+10;
const int mod=998244353;
const int Mod = 1e9+7;
const double eps=1e-3;
inline bool read(ll &num)
{char in;bool IsN=false;
in=getchar();if(in==EOF) return false;while(in!='-'&&(in<'0'||in>'9')) in=getchar();if(in=='-'){ IsN=true;num=0;}else num=in-'0';while(in=getchar(),in>='0'&&in<='9'){num*=10,num+=in-'0';}if(IsN) num=-num;return true;}
ll n,m,p;
char s[maxn],t[maxn];
ll sum[maxn][30];
int vis[30],tvis[30];
bool mp1[Maxn],mp2[Maxn];
ull H[maxn],H1[maxn];
char F[300];
inline void out(ll x){ if (x == 0) return (void) (putchar('0')); ll tmp = x > 0 ? x : -x; if (x < 0) putchar('-'); int cnt = 0; while (tmp > 0) { F[cnt++] = tmp % 10 + '0'; tmp /= 10; } while (cnt > 0) putchar(F[--cnt]); printf("\n"); }
ll qpow(ll a,ll b){
ll ans = 1;
while(b){
if(b&1) ans = (ans*a)%mod;
b/=2;a = (a*a)%mod;
}return ans;
}
int main(){
scanf("%s%s",s+1,t+1);
int lens = strlen(s+1),lent = strlen(t+1);
for(register int i=1;i<=lens;i++) vis[s[i]-'a']++;
ll temp_27 = qpow(27,lens);
ll ans = 0;
for(register int i=1;i<=lent;i++) H[i] = (H[i-1]*27 + (t[i]-'a'+1))%mod;
for(int i=1;i<=lens;i++) tvis[t[i]-'a']++;
int cot = 0;
for(int i=0;i<26;i++) if(tvis[i] != vis[i]) cot++;
for(register int i=lens;i<=lent;i++){
if(!cot){
ll tempx = (H[i] - (H[i-lens]*temp_27)%mod+mod)%mod;
tempx %= 10000007;
if(!mp1[tempx]){
mp1[tempx] = true;
ans++;
}
}
tvis[t[i-lens+1]-'a']--;
if(tvis[t[i-lens+1]-'a'] == vis[t[i-lens+1]-'a']&&tvis[t[i-lens+1]-'a']+1 != vis[t[i-lens+1]-'a']) cot--;
if(tvis[t[i-lens+1]-'a'] != vis[t[i-lens+1]-'a']&&tvis[t[i-lens+1]-'a']+1 == vis[t[i-lens+1]-'a']) cot++;
tvis[t[i+1]-'a']++;
if(tvis[t[i+1]-'a'] == vis[t[i+1]-'a']&&tvis[t[i+1]-'a']-1 != vis[t[i+1]-'a']) cot--;
if(tvis[t[i+1]-'a'] != vis[t[i+1]-'a']&&tvis[t[i+1]-'a']-1 == vis[t[i+1]-'a']) cot++;
}
out(ans);
return 0;
}
/**
aab
abacabaa
**/
最后rk6..加油!