這次的考試題很水,有很多人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;
}
博客結束