A. k-rounding
思路: 求 n和10^k的最小公倍数
我直接是 乘积除以最小公倍数
看别人代码有一个是 把乘法换为累加,我觉的还不错。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int i,j,t,n;
ll a,b;
while(~scanf("%lld%lld",&a,&b))
{
if(b==0)
{
cout<<a<<endl;
}
else
{
ll c=1;
ll tt=b;
while(tt--)
{
c*=10;
}
cout<<a*c/gcd(a,c)<<endl;
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define MAX 400005
typedef long long ll;
string str;
int st[200];
int ed[200];
int main()
{
int k;
int n;
while(~scanf("%d %d",&n,&k))
{
memset(st,0,sizeof(st));
memset(ed,0,sizeof(ed));
cin>>str;
// str.length();
for(int i=0;i<str.length();i++)
{
if(st[str[i]]==0)
{
st[str[i]]=i+1;
}
}
for(int i=str.length()-1;i>=0;i--)
{
if(ed[str[i]]==0)
{
ed[str[i]]=i+1;
}
}
int f=0;
int cnt=0;
for(int i=0;i<str.length();i++)
{
if(st[str[i]])
{
cnt++;
st[str[i]]=0;
}
if(cnt>k)
{
f=1;
break;
}
if(ed[str[i]]==i+1)
{
cnt--;
ed[str[i]]=0;
}
}
if(f)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
return 0;
}
昨晚一直wa了,今天看了错误 结果,发现末尾有非法字符,
if(); 条件后面直接加了 分号,删了就过了 。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
typedef long long ll;
int vis[200];
int main()
{
vis['a']=1;
vis['e']=1;
vis['i']=1;
vis['o']=1;
vis['u']=1;
string s;
bool tf=true;
while(cin>>s)
{
if(s.length()<3)
{
cout<<s<<endl;
}
else
{
int f=0;
char c;
c=s[0];
if(vis[c])
{
f++;
}
int i;
cout<<s[0]<<s[1];
for(i=2;i<s.length();i++)
{
c=s[i];
if(vis[s[i]]==0&&vis[s[i-1]]==0&&vis[s[i-2]]==0)
{
if(c==s[i-1]&&c==s[i-2])
{
cout<<s[i];
}
else
{
cout<<" "<<s[i];
if(i+1<s.length());
cout<<s[++i];
}
}
else{
cout<<s[i];
}
}
cout<<endl;
}
}
return 0;
}
D. Polycarp's phone book
参照了别人的代码,自己敲了一遍,因为区间不长所以可以暴力区间, 在处理相同字符串有不同 电话号码 映射时,标记为 -1 说明该 字符肯定不符合条件,最后在遍历一遍map 数组,记录长度最短的
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<string,int>mapp;
string ans[70007];
int main()
{
int n;
string s;
cin>>n;
for(int ii=1;ii<=n;ii++)
{
cin>>s;
string temp;
for(int i=0;i<s.length();i++)
{
temp="";
for(int j=i;j<s.length();j++)
{
temp+=s[j];
if(mapp[temp]&&mapp[temp]!=ii)
{
mapp[temp]=-1;
}
else
{
mapp[temp]=ii;
}
}
}
}
map<string,int>::iterator it;
for(it=mapp.begin();it!=mapp.end();it++)
{
// cout<<it->second<<" "<<it->first<<endl;
if(it->second!=-1)
if(ans[it->second]==""||ans[it->second].size()>((it->first).size()))
{
ans[it->second]=(it->first);
}
}
for(int i=1;i<=n;i++)
{
cout<<ans[i]<<endl;
}
return 0;
}
网友评论