BestCoder Round #54 (div.2) 题解
2015-09-07 22:21
453 查看
最后1002TLE了,好遗憾没有AK,若菜第一次如此接近AK,不说了,还是好好码题吧。
1001 A problem of sorting 思路:getline整行读入 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <string> using namespace std; struct point { int x;string s; }p[105]; string s; bool cmp(point a,point b) { return a.x>b.x; } int main() { //freopen("in.txt","r",stdin); int n,T;scanf("%d",&T); while(T--) { scanf("%d",&n);getchar(); for(int i=0;i<n;++i) { getline(cin,s); int x=s.length(),o=0; for(int j=x-4;j<=x-1;++j) { o=o*10+(s[j]-'0'); } p[i].s=s.substr(0,x-5);p[i].x=o; } sort(p,p+n,cmp); for(int i=0;i<n;++i) { cout<<p[i].s<<endl; } } return 0; }
1002 The Factor 思路:找最小的两个质因子,不足则为-1 //map实现,注意特判size为0的情况 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <string> #include <map> using namespace std; int n,a; map <int,int> mp; void fac(int x) { int now=x; for(int i=2;i<=x/i;++i) if(now%i==0) { while(now%i==0) { ++mp[i];now/=i; } } if(now!=1)++mp[now]; } int main() { //freopen("in.txt","r",stdin); int T;scanf("%d",&T); while(T--) { mp.clear();long long ans; scanf("%d",&n); for(int i=0;i<n;++i) { scanf("%d",&a); fac(a); } if(mp.size()==0) { puts("-1");continue; } map <int,int> ::iterator it=mp.begin(); long long q=(long long)it->first; if(it->second>=2) { ans=q*q; printf("%I64d\n",ans); continue; } ++it; if(it==mp.end()) { puts("-1");continue; } else { long long o=(long long)it->first; ans=q*o; printf("%I64d\n",ans); continue; } puts("-1"); } return 0; } //priority_queue实现 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <string> #include <map> #include <queue> using namespace std; int n,a; priority_queue <int> q; void fac(int x) { int now=x; for(int i=2;i<=x/i;++i) if(now%i==0) { while(now%i==0) { q.push(i); while(q.size()>2)q.pop(); now/=i; } } if(now!=1) { q.push(now); while(q.size()>2)q.pop(); } } int main() { //freopen("in.txt","r",stdin); int T;scanf("%d",&T); while(T--) { long long ans; while(!q.empty())q.pop(); scanf("%d",&n); for(int i=0;i<n;++i) { scanf("%d",&a); fac(a); } if(q.size()<2)puts("-1"); else { ans=(long long)q.top(); q.pop(); ans*=(long long)q.top(); printf("%I64d\n",ans); } } return 0; }
1003 The Factor 思路:直接高精度,注意全为0的时候Yes,若存在0且其他数有不是0的那么一定是No,特判n=1 import java.util.*; import java.math.*; import java.io.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n,T;T=cin.nextInt(); BigInteger a[]= new BigInteger [105]; BigInteger q=BigInteger.ZERO; while(T-->0) { n=cin.nextInt(); int ans=0; boolean flag=false; for(int i=0;i<n;i++) { a[i]=cin.nextBigInteger(); if(a[i].compareTo(q)==0){flag=true;ans++;} } if(ans==n) { System.out.println("Yes"); continue; } if(n==1) { System.out.println("Yes"); continue; } if(flag==true) { System.out.println("No"); continue; } BigInteger fac; for(int i=1;i<=n-2;i++) { fac=a[i-1].multiply(a[i+1]); if(fac.compareTo(a[i].multiply(a[i]))!=0) { flag=true;break; } } if(flag)System.out.println("No"); else System.out.println("Yes"); } } }
1004 Reflect 思路:见官方题解,写了前4项后纯属YY #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <string> #include <map> using namespace std; int calcPhi(int n) { int ans = n; for (int i = 2; i * i <= n; i++) if (n % i == 0) { ans -= ans / i; while (n % i == 0) n /= i; } if (n > 1) ans -= ans / n; return ans; } int main() { //freopen("in.txt","r",stdin); int n,T; scanf("%d", &T); while(T--) { scanf("%d",&n); int ans=calcPhi(n+1); cout<<ans<<endl; } return 0; }
相关文章推荐
- Linux系统安装
- 1241 Oil Deposits
- android之xmpp初探(一)
- 匹配特定数字串
- 求1+2+3+...+n
- 构建自己的PHP框架--抽象Controller的基类
- Linux find查找
- linux运维实战练习-2015年8月30日课程作业(2)
- uva 10319 - Manhattan(2 sat)
- 剑指offer:斐波那契数列
- C# 语音开发示例
- Lock的简单使用
- CCMenuItem解析
- UVA 11997 K Smallest Sums (多路归并)
- Spring Boot开发之明月千城(一)
- Palindrome Number
- php1
- 文件查找find的使用总结
- java基础 环境变量的作用
- HTML编写需要注意的事项