这次的考试题很水,有很多人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;
}
博客结束