算是正式的打了一次cf的题吧,之前都没有好好打过。(手动滑稽
A:签到题吧,输入n,k,让n乘一个最小的数,使得末尾有k个0。
我们知道,一个数末尾的0的个数,就是它2的因子数与5的因子数的最小值,这样,就可以轻松水过了。
#include<bits/stdc++.h>
using namespace std;
long long n,k,m;
long long num2,num5;
long long ans;
int main()
{
cin>>n>>k;m=n;
while(n%2==0)num2++,n/=2;
while(n%5==0)num5++,n/=5;
ans=1;
if(num2<k)
for(int i=num2+1;i<=k;i++)ans*=2;
if(num5<k)
for(int i=num5+1;i<=k;i++)ans*=5;
cout<<ans*m;
return 0;
}
B:简单题,看数据范围就知道枚举就可以了。
然而昨晚交了3遍都没过233。怀疑人生,今天看了看数据,woc,题意都错了233。
有很多层楼,每层楼有一样多的flat,编号从小到大依次排列。告诉你m个flat在几楼,问n的楼层是否可以唯一确定,如果可以,输出。
我以为每层楼的flat个数要唯一233。
#include<bits/stdc++.h>
using namespace std;
int n,m;
int A[105],B[105];
bool E[105],Ans[105];
int tmp,tot;
bool check(int x)
{
for(int i=1;i<=m;i++)
{
int T=A[i]/x;
if(A[i]%x!=0)T++;
if(T!=B[i])return false;
}
return true;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)cin>>A[i]>>B[i];
for(int i=1;i<=100;i++)
if(check(i))E[i]=true;
for(int i=1;i<=100;i++)
{
if(!E[i])continue;
tmp=n/i;
if(n%i!=0)tmp++;
Ans[tmp]=true;
}
for(int i=1;i<=100;i++)
if(Ans[i])tot++,tmp=i;
if(tot==1)cout<<tmp;
else cout<<-1;
return 0;
}
C:简单题,模拟就可以了。
题意是不能让三个不同的辅音字母连起来,用最少的空格隔开。
#include<bits/stdc++.h>
using namespace std;
string s;
bool E[3001];
bool f(char c)
{
return (c!='a'&&c!='e'&&c!='i'&&c!='o'&&c!='u');
}
bool check(int pos)
{
if(E[pos-1])return false;
if(s[pos]==s[pos-1]&&s[pos-1]==s[pos-2])return false;
if(f(s[pos])&&f(s[pos-1])&&f(s[pos-2]))return true;
return false;
}
int main()
{
cin>>s;
int len=s.size();
if(len<=2){
cout<<s;
return 0;
}
cout<<s[0]<<s[1];
for(int i=2;i<len;i++)
{
if(check(i))cout<<" ",E[i]=true;
cout<<s[i];
}
}
D:简单数据结构,字典树水过就好了。
当时我认为stl用string可以水过,没想到昨天第一个点就挂了。
原来cf也有输出格式这种东西。。。。。
格式鬼畜,除最后一行要打个空格,行末无回车,我也很绝望啊。
但是,string真慢呀。水不过啊,贴字典树吧。
#include<bits/stdc++.h>
using namespace std;
int n;
string s[70005],tmp,ans;
map <string,int> E;
set <string> Q[70005];
char x;
bool flag;
int main()
{
// freopen("in.txt","r",stdin);
scanf("%d ",&n);
for(int i=1;i<=n;i++)
{
for(int j=0;j<=8;j++)
{
x=getchar();
s[i][j]=x;
}
scanf(" ");
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<9;j++)
{
for(int k=j;k<9;k++)
{
tmp="";
for(int l=j;l<=k;l++)
tmp+=s[i][l];
if(!Q[i].count(tmp))E[tmp]++,Q[i].insert(tmp);
}
}
}
for(int i=1;i<=n;i++)
{
flag=false;
for(int len=1;len<=9;len++)
{
if(flag)break;
for(int k=0;k<9;k++)
{
if(k+len-1>=9)break;
if(flag)break;
tmp="";
for(int l=k;l<=k+len-1;l++)
tmp+=s[i][l];
if(E[tmp]==1)if(!flag)ans=tmp,flag=true;
}
}
for(int j=0;j<ans.size();j++)
putchar(ans[j]);
if(i!=n)cout<<endl;
else cout<<" ";
}
return 0;
}
stl。。。第51个点T了。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
int mx;
char a[70010][10],temp[10],ans[10];
struct trie
{
trie *next[10];
int cnt;
trie()
{
memset(next,0,sizeof(next));
cnt=0;
}
};
trie *root;
void insert(char *s)
{
trie *p=root;
int i,k;
for(i=0;s[i]!='\0';++i)
{
k=s[i]-'0';
if(p->next[k]==NULL)
p->next[k]=new trie();
p=p->next[k];
p->cnt++;
}
}
void Delete(char *s)
{
trie *p = root;
int i,k;
for(i=0;s[i]!='\0';i++)
{
k = s[i]-'0';
p = p->next[k];
p->cnt--;
}
}
int query(char *s)
{
trie *p = root;
int len = 0;
for(int i=0;s[i]!='\0';i++)
{
int x = s[i] - '0';
temp[len++] = s[i];
p = p->next[x];
if(p->cnt == 0)
{
if(len < mx)
{
mx = len;
temp[len] = '\0';
strcpy(ans,temp);
break;
}
}
}
}
void del(trie *p)
{
for(int i=0;i<10;i++)
if(p->next[i]!=NULL)
del(p->next[i]);
free(p);
}
int main(void)
{
int n,i,j;
while(scanf("%d",&n)==1)
{
root=new trie();
for(i=1;i<=n;i++)
{
scanf("%s",a[i]);
for(j=0;j<9;j++)
insert(a[i]+j);
}
for(i=1;i<=n;i++)
{
mx = 10;
for(j=0;j<9;j++)
Delete(a[i]+j);
for(j=0;j<9;j++)
query(a[i]+j);
for(j=0;j<9;j++)
insert(a[i]+j);
printf("%s\n",ans);
}
del(root);
}
return 0;
}
找的字典树。。。
E、F:没看了2333333。
B题看错,D题格式233。
还以为要换号了。
不过昨天cf评测器一副挂了的样子,30多页in queue,我也很绝望的啊。
so,unrated的了。