最后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;
}