HL第二次考試

這次的考試題很水,有很多人AK了,但我還是沒AK…


回到正文
##第一題
cz找了一串只由小寫字母組成的序列,每次他將提問ltz某個小寫字母第k次出現的位置,假如全對,輸出AK,否則輸出錯誤的次數

預處理一遍每個字母第k次出現的位置,然後直接輸出

#include<bits/stdc++.h>
using namespace std;
int a[30][50100]={};
int b[30]={};
int n,m;
int ans=0; 
inline int read()//快讀,很快
{
	int x=0,w=0;char ch=0;
	while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
	while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return w?-x:x;
} 

int main()
{
	freopen("index.in","r",stdin);
	freopen("index.out","w",stdout);
	n=read();
	m=read();
	for (int i=1;i<=n;i++)
	  {
	  	char ch;
	  	ch=read();
	  	a[ch-'a'][++b[ch-'a']]=i;//預處理一遍
	  	//cout<<ch<<' '<<b[ch-'a']<<' '<<a[ch-'a'][b[ch-'a']]<<endl;
	  }
	for (int i=1;i<=m;i++)
	  {
	  	char ch;
	  	int x,y;
	  	ch=read();
	  	x=read();
	  	y=read();
	  	int z=ch-'a';
	  	if (a[z][x]!=y)//直接判斷
	  	  ans++;
	  } 
	if (ans==0)//全對
	  cout<<"AK"<<endl;
	else
	  cout<<ans<<endl;
	return 0;
	fclose(stdin);
	fclose(stdout);
}

第一遍時最後兩個點超時,加個快讀就好了
##第二題
輸入n個題目,每個題目需a[i]秒,總共m秒,最多能做幾題

最純的貪心,相比智力大沖浪還要多一個條件

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[100100]={};
int ans=0;
int main()
{
	freopen("zzx.in","r",stdin);
	freopen("zzx.out","w",stdout);
	cin>>n>>m;
	for (int i=1;i<=n;i++)
	  cin>>a[i];
	sort(a+1,a+n+1);
	for (int i=1;i<=n;i++)
	  {
	  	m-=a[i];
	  	if (m<0)
	  	  break;
	  	ans++;
	  }
	cout<<ans<<endl;
	fclose(stdin);
	fclose(stdout);
	return 0;
}  

##第三題
最簡化版:輸出a,b,c的最小公倍數

多說無益

#include<bits/stdc++.h>
using namespace std;
int a,b,c;
inline unsigned long long gcd(unsigned long long a,unsigned long long b)
{
	if (a%b==0)
	  return b;
	else
	  return gcd(b,a%b);
}
unsigned long long lcm (unsigned long long a,unsigned long long b)
{
	return (a*b/gcd(a,b));
}
int main()
{
	freopen("running.in","r",stdin);
	freopen("running.out","w",stdout);
	cin>>a>>b>>c;
	cout<<lcm(lcm(a,b),c)<<endl;
	fclose(stdin);
	fclose(stdout);
	return 0; 
}

因爲最小公倍數會爆炸,爆掉long long,所以要用unsigned long long,也可以在lcm函數裏先除再乘,就不會爆了
看着unsigned long long很噁心的可以用#define(滑稽)
##第四題
計算n的階乘裏末尾有幾個0

10的因數是2和5,因爲2的個數比5多得多,所以只要計算n的階乘裏有幾個5的倍數就行了

#include<bits/stdc++.h>
using namespace std;
long long ans=0;
int n;
int main()
{
	freopen("zero.in","r",stdin);
	freopen("zero.out","w",stdout);
	cin>>n;
	for (int i=5;i<=n;i*=5)
	  ans+=n/i;
	cout<<ans<<endl;
	fclose(stdin);
	fclose(stdout);
	return 0;
}

博客結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章