牛客白月赛15题解

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客白月赛15题解相关的知识,希望对你有一定的参考价值。

https://ac.nowcoder.com/acm/contest/917#question

目录

诡异的因数

#include<bits/stdc++.h>
using namespace std;
void solve()

	int n; cin>>n;
	int cnt=0;
	for(int i=1;i<=n/i;i++)
	
		if(n%i==0) 
		
			cnt++;
			if(n/i!=i) cnt++;
		
	
	cout<<cnt<<endl;

int main(void)
 
	int t; cin>>t;
	while(t--)  solve();
	return 0;

表单

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m;
int a[N],cnt;
map<string,int>mp;
char s[100005];
int main(void)
 
	cin>>n>>m;
	for(int i=0;i<n;i++)
	
		scanf("%s",s);
		if(mp[s]) cnt++;
		mp[s]++;
	
	while(m--)
	
		int op; scanf("%d",&op);
		if(op==1)
		
			scanf("%s",s);
			if(mp[s]) cnt++;
			mp[s]++;
		else
		
			cout<<cnt<<endl;
			cnt=0;
		
	
	return 0;

分数的运算

#include<bits/stdc++.h> 
using namespace std;
typedef long long int LL;
LL xx1,yy1,xx2,yy2;
LL gcd(LL a,LL b) return b?gcd(b,a%b):a;
void f1()

	LL a=xx1*yy2+xx2*yy1;
	LL b=yy1*yy2;
	int flag=1;
	if(a<0) flag=flag*(-1);
	if(b<0) flag=flag*(-1);
	a=labs(a),b=labs(b);
	LL temp=gcd(a,b);
	if(a==0||b==0)
	
		printf("0 0\\n");
	
	else printf("%lld %lld\\n",flag*a/temp,b/temp);

void f2() 

	LL a=xx1*yy2-xx2*yy1;
	LL b=yy1*yy2;
	int flag=1;
	if(a<0) flag=flag*(-1);
	if(b<0) flag=flag*(-1);
	a=labs(a),b=labs(b);
	LL temp=gcd(a,b);
	if(a==0||b==0)
	
		printf("0 0\\n");
	
	else printf("%lld %lld\\n",flag*a/temp,b/temp);

void f3()

	LL a=xx1*xx2;
	LL b=yy1*yy2;
	int flag=1;
	if(a<0) flag=flag*(-1);
	if(b<0) flag=flag*(-1);
	a=labs(a),b=labs(b);
	LL temp=gcd(a,b);
	if(a==0||b==0)
	
		printf("0 0\\n");
	
	else printf("%lld %lld\\n",flag*a/temp,b/temp);

void f4()

	LL a=xx1*yy2;
	LL b=yy1*xx2;
	int flag=1;
	if(a<0) flag=flag*(-1);
	if(b<0) flag=flag*(-1);
	a=labs(a),b=labs(b);
	LL temp=gcd(a,b);
	if(a==0||b==0)
	
		printf("0 0\\n");
	
	else printf("%lld %lld\\n",flag*a/temp,b/temp);

int main(void)

	cin>>xx1>>yy1>>xx2>>yy2;
	f1(),f2(),f3(),f4();
	return 0;

数据结构题【分块】

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int mod=20180623;
typedef long long int LL;
LL a[N],id[N],n,m,len;
vector<LL>ve[N];
void init()

	len=sqrt(n);
	for(int i=1;i<=n;i++)
	
		id[i]=(i-1)/len+1;
		ve[id[i]].push_back(a[i]);
	
	for(int i=1;i<=id[n];i++) sort(ve[i].begin(),ve[i].end());

LL query(LL l,LL r,LL x)

	LL cnt=0;
	for(int i=l;i<=min(r,id[l]*len);i++) if(a[i]==x) cnt++;
	if(id[l]==id[r]) return cnt;
	for(int i=id[l]+1;i<=id[r]-1;i++)
	
		int index1=lower_bound(ve[i].begin(),ve[i].end(),x)-ve[i].begin();
		int index2=upper_bound(ve[i].begin(),ve[i].end(),x)-ve[i].begin();
		cnt+=index2-index1;
	
	for(int i=(id[r]-1)*len+1;i<=r;i++) if(a[i]==x) cnt++;
	return cnt;

int main(void)

	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	init();
	while(m--)
	
		int l1,r1,l2,r2,x; cin>>l1>>r1>>l2>>r2>>x;
		if(l1>r1) swap(l1,r1);
		if(l2>r2) swap(l2,r2);
		cout<<query(l1,r1,x)<<'\\n';
		cout<<query(l2,r2,x)<<'\\n';
		cout<<query(l1,r1,x)*query(l2,r2,x)%mod<<'\\n';
	
	return 0;

以上是关于牛客白月赛15题解的主要内容,如果未能解决你的问题,请参考以下文章

牛客白月赛32题解

牛客白月赛8题解

牛客白月赛4 题解

牛客白月赛11题解

牛客白月赛12题解

牛客白月赛10题解