codeforces 577

codeforces 577A

题目链接http://codeforces.com/problemset/problem/577/A

题目大意:给出一个n*n的表格,每个表格对应的值为横坐标*纵坐标,然后给一个数x,求数x在表格中出现了几次(具体请看题意)

题目分析1 ≤ n ≤ 10^5, 1 ≤ x ≤ 10^9

方案一:用n*n的循环,记录每个表格中对应的数据,但时间复杂度是10^10,必定会超时,所以,排除这种方法

方案二:题目可以转化为求x的的约数有几个,x的约数最大为10

代码实现

 

#include<bits/stdc++.h>

using namespace std;

int main()
{
    int ans=0;
    int n,x,t,a;
    scanf("%d %d",&n,&x);
    for(int i=x;i>=1;i--)
    {
        if(i>n)
            continue;
        //printf("i==%d\n",i);
        t=x%i;
        a=x/i;
        if(t==0&&a<=n)
        {
           // printf("a==%d\n",a);
            ans++;
        }
    }
    printf("%d\n",ans);
    return 0;
}

 

codeforces 577B

题目链接http://codeforces.com/contest/577/problem/B

题目大意:给出n个数,从中挑选出一些数让它们的和是k的倍数,若能找到满足条件的输出yes,否则输出no

题目分析:如果n>k,则一定能满足条件;当n<=k,n个数组成的数可能相同,每次判断很耗时间,所以,用set容器将和全都存储起来,set容器会自动去重。

代码实现

 

posted @ 2015-09-16 20:30  Gssol  阅读(231)  评论(0编辑  收藏  举报