Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)
A. k-rounding
题目意思:给两个数n和m,现在让你输出一个数ans,ans是n倍数且末尾要有m个0;
题目思路:我们知道一个数末尾0的个数和其质因数中2的数量和5的数量的最小值有关系,所以我们可以把n中的2和5的因子数量分别算出来,然后看一下是否都大于等于m,否则我们就把他们补成m个。然后再乘回去就结束了。
题目链接:http://codeforces.com/contest/861/problem/A
代码:
1 /* *********************************************** 2 Author :xiaowuga 3 Created Time :2017年10月02日 星期一 18时00分24秒 4 File Name :A.cpp 5 ************************************************ */ 6 #include <bits/stdc++.h> 7 #define mem(s,ch) memset(s,ch,sizeof(s)) 8 typedef long long LL; 9 #define inf 0x3f3f3f3f 10 const long long N=1000000; 11 const long long mod=1e9+7; 12 using namespace std; 13 int main(){ 14 ios::sync_with_stdio(false);cin.tie(0); 15 LL n,k; 16 cin>>n>>k; 17 LL c1=0,c2=0; 18 LL t=n; 19 while(t%2==0){ 20 c1++; 21 t/=2; 22 } 23 while(t%5==0){ 24 c2++; 25 t/=5; 26 } 27 while(c1<k) c1++; 28 while(c2<k) c2++; 29 for(int i=0;i<c1;i++){ 30 t*=2; 31 } 32 for(int i=0;i<c2;i++){ 33 t*=5; 34 } 35 cout<<t<<endl; 36 return 0; 37 }
B. Which floor?
题目意思:小明住在一个每层楼都有相同数量房间的大楼里面,但是他忘记每层楼有多少个房间了。现在他只记得某些房间在几楼,现在让你根据小明的记忆,判断编号为n的房间在哪一楼是否可以确定。(房间的编号从1-n)从底层到高层;
题目思路:我们发现数据范围很小,这意味这我们可以暴力枚举每层有多少间房间,然后和小明的记忆进行比对,然后把符合小明记忆的数量存起来,然后最后判断他们指出编号为n的房间的楼层是否相同,如果不同就输出-1.
题目链接:http://codeforces.com/contest/861/problem/B
代码:
1 /* *********************************************** 2 Author :xiaowuga 3 Created Time :2017年10月02日 星期一 18时48分45秒 4 File Name :B.cpp 5 ************************************************ */ 6 #include <bits/stdc++.h> 7 #define mem(s,ch) memset(s,ch,sizeof(s)) 8 typedef long long LL; 9 #define inf 0x3f3f3f3f 10 const long long N=1000000; 11 const long long mod=1e9+7; 12 using namespace std; 13 vector<pair<int,int> >q; 14 vector<int>p; 15 int main(){ 16 ios::sync_with_stdio(false);cin.tie(0); 17 int n,k; 18 cin>>n>>k; 19 q.resize(k+1); 20 for(int i=0;i<k;i++) { 21 cin>>q[i].first>>q[i].second; 22 } 23 int ct=0; 24 int ans=0; 25 for(int i=1;i<=100;i++){ 26 int cnt=0; 27 for(int j=0;j<k;j++){ 28 int x=q[j].first,y=q[j].second; 29 int l; 30 if(x%i==0) l=0;else l=1; 31 int z=x/i+l; 32 if(z==y) cnt++; 33 else break; 34 } 35 if(cnt==k){ 36 ct++; 37 p.push_back(i); 38 } 39 } 40 if(ct==0) cout<<-1<<endl; 41 else if(ct==1){ 42 cout<<(n/p[0]+(n%p[0]!=0))<<endl; 43 } 44 else{ 45 ans=(n/p[0]+(n%p[0]!=0)); 46 for(int i=1;i<p.size();i++){ 47 int a=n/p[i]+(n%p[i]!=0); 48 if(a!=ans){cout<<-1<<endl; return 0;} 49 } 50 cout<<ans<<endl; 51 } 52 return 0; 53 }
C. Did you mean...
题目意思:有一个字符串,如果有超过三个以上的辅音字母连续出现就需要添加一个空格,三个都是辅音字母都是一样的则不算,em…………直接模拟就好了,做的时候没有读懂题目的意思,简直GG
题目思路:每次发现累计三个辅音字母就判断一个三个是不是一样的,如果是就那么计数器减减,否则就在最后一个辅音字母输出的前面加一个空格,然后计数器清为1,如果碰到原因字母计数器清为0。
代码:
1 /* *********************************************** 2 Author :xiaowuga 3 Created Time :2017年10月02日 星期一 20时05分34秒 4 File Name :C.cpp 5 ************************************************ */ 6 #include <bits/stdc++.h> 7 #define mem(s,ch) memset(s,ch,sizeof(s)) 8 typedef long long LL; 9 #define inf 0x3f3f3f3f 10 const long long N=1000000; 11 const long long mod=1e9+7; 12 using namespace std; 13 int check(char a){ 14 if(a=='a'||a=='e'||a=='i'||a=='o'||a=='u') return 1; 15 else return 0; 16 } 17 int main(){ 18 ios::sync_with_stdio(false);cin.tie(0); 19 string q; 20 cin>>q; 21 int len=q.size(); 22 int ct=0; 23 for(int i=0;i<len;i++){ 24 if(!check(q[i])){ 25 ct++; 26 if(ct>=3){ 27 if(q[i-1]==q[i]&&q[i]==q[i-2]) ct--; 28 else { 29 cout<<' '; 30 ct=1; 31 } 32 } 33 34 } 35 else ct=0; 36 cout<<q[i]; 37 } 38 cout<<endl; 39 return 0; 40 }