字节跳动
1.
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
#define minn 1e-9
int n;
int ans[1000001];
int main(){
scanf("%d",&n);
string str;
cin>>str;
//cout<<str;
vector<int> que;
for(int i=0;i<n;i++){
if(str[i]=='O'){
que.push_back(i);
ans[i]=0;
}
else{
ans[i]=1;
}
}
//cout<<que.size()<<endl;
int temp=-1;
for(int i=0;i<n;i++){
if(ans[i]==0){
temp++;
printf("%d ",ans[i]);
continue;
}
if(i<que[0]){
ans[i]=que[0]-i;
}
else{
if(temp==que.size()-1){
ans[i]=i-que[temp];
}
else{
ans[i]=min(i-que[temp],que[temp+1]-i);
}
}
printf("%d ",ans[i]);
}
printf("\n");
return 0;
}
2.
感觉思路对的,但是就是过0%,不知道咋回事
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
#define minn 1e-9
int t,n,m;
int a[10001];
int main(){
scanf("%d",&t);
while(t--){
scanf("%d %d",&n,&m);
priority_queue<int,vector<int>,less<int> > pq;
int sum=0;
int count=0;
for(int i=0;i<n;i++){
cin>>a[i];
if(sum+a[i]<=m){
pq.push(a[i]);
sum=sum+a[i];
if(i==n-1)
printf("%d",count);
else
printf("%d ",count);
}
else{
while(sum+a[i]>m){
int temp=pq.top();
pq.pop();
sum=sum-temp;
count++;
}
pq.push(a[i]);
sum=sum+a[i];
if(i==n-1)
printf("%d",count);
else
printf("%d ",count);
}
//printf("sum%d \n",sum);
}
printf("\n");
}
return 0;
}
3.
拓扑排序
懒得写了
输出-1过50%。。。
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<queue>
#include<sstream>
using namespace std;
#define minn 1e-9
int main(){
string line;
int t;
while(getline(cin,line)&&line!=""){
stringstream ss(line);
int i;
ss>>i;
//cout<<i<<endl;
}
printf("-1\n");
return 0;
}
4.
ebay
1.
暴力45%
from collections import Counter
n = int(input().strip())
a = list(map(int, input().strip().split()))
m = int(input().strip())
queries = []
for _ in range(m):
l, r = map(int, input().strip().split())
ans = 0
cnt = Counter(a[l-1:r])
for key in cnt:
if cnt[key] == 1:
ans += 1
print(ans)
from collections import Counter, defaultdict, OrderedDict
def cnt_one(c):
ans = 0
for key in c:
if c[key] == 1:
ans += 1
return ans
n = int(input().strip())
a = list(map(int, input().strip().split()))
m = int(input().strip())
queries = defaultdict(list)
res_queries = OrderedDict()
print_queries = []
for _ in range(m):
l, r = map(int, input().strip().split())
queries[l].append(r)
res_queries[(l, r)] = 0
print_queries.append((l, r))
for key in queries:
queries[key].sort()
cnt = Counter()
l = key
for r in range(l, queries[key][-1]+1):
cnt[a[r-1]] += 1
if (l, r) in res_queries:
res_queries[(l, r)] = cnt_one(cnt)
for l, r in print_queries:
print(res_queries[(l, r)])
2.
智力题
1.
第一次抓第二个,不在二中,则在一三四五中,晚上只能跑到二三四五中,
第二次抓第三个,不在三中,则在二四五中,晚上跑到一三四五中,
第三次抓第四个,不在四中,则在一三五中,晚上跑到二四中,
第四次抓第四个,不在四中,则在二中,晚上跑到一三中,
第五次抓第三个,不在三中,则在一中,晚上跑到二中,
第六次抓第二个,一定能抓到。
所以最多六次就可以抓到
2.
甲乙两人射箭 只有2种情况 射中 射不中 概率都是50%。甲乙各100次 。甲作弊了,他射了101次,问甲获胜的概率