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容器会自动去重。
代码实现: