codeforces 691F Couple Cover 暴力

分析:开一个300w的数组,统计,然后nlogn统计每个值在在序对第一个出现有多少种情况

时间复杂度:O(nlogn) n在3e6数量级

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N  = 3e6;
const LL mod = 1e9+7;
LL n,m,sum[N+5],c[N+5];
int main(){
  scanf("%I64d",&n);
  int mx=0;
  for(int i=1;i<=n;++i){
    int x;scanf("%d",&x);++c[x];
    mx=max(x,mx);
  }
  for(int i=1;i<=mx;++i){
    for(int j=1;j<=mx;++j){
       if(1ll*i*j>N)break;
       if(i==j)sum[i*j]+=c[i]*(c[i]-1);
       else sum[i*j]+=c[i]*c[j];
    }
  }
  for(int i=1;i<=N;++i)sum[i]+=sum[i-1];
  scanf("%I64d",&m);
  while(m--){
    int p;
    scanf("%d",&p);
    printf("%I64d\n",n*(n-1)-sum[p-1]);
  }
  return 0;
}

时间: 2024-10-13 11:10:48

codeforces 691F Couple Cover 暴力的相关文章

codeforces 691F Couple Cover(暴力预处理)

题意: 给你一个长度为n的序列,m个询问,每次学问一个数 让你回答序列中乘积不小于它的数对有多少对 思路: 预处理当前序列中不大于当前值的数对有多少,然后用总数减去他的前一个就是答案了 /* *********************************************** Author :devil ************************************************ */ #include <cstdio> #include <cstring&

Codeforces 57C Array dp暴力找规律

题目链接:点击打开链接 先是计算非递增的方案, 若非递增的方案数为x, 则非递减的方案数也是x 答案就是 2*x - n 只需求得x即可. 可以先写个n3的dp,然后发现规律是 C(n-1, 2*n-1) 然后套个逆元即可. #include<iostream> #include<cstdio> #include<vector> #include<string.h> using namespace std; #define ll long long #def

Codeforces 57B Martian Architecture 暴力||线段树

题目链接:点击打开链接 题意:n长的序列(初始全为0) m个操作 k个查询 下面m个操作[l,r] h 代表 a[l] +=h; a[l+1] += h+i; a[l+i] += h+i;  l<=i<=r 然后问k个位置的和 因为k<=100 所以直接暴力也可以 ----------------------- 如果k<=100000 也是可以做的 只需要给区间记录一个标记lazy,表示从左端点开始 l, l+1, l+i ··· l+r 而向下更新时, 左区间则直接更新, 右区间

codeforces 724B Batch Sort(暴力-列交换一次每行交换一次)

题目链接:http://codeforces.com/problemset/problem/724/B 题目大意: 给出N*M矩阵,对于该矩阵有两种操作: (保证,每行输入的数是 1-m 之间的数且不重复) 1.交换两列,对于整个矩阵只能操作一次 2.每行交换两个数. 交换后是否可以使每行都是1-m 数字递增. 解题思路: 1.得到矩阵后先判断,是否每行可以交换两个数可以得到递增的矩阵,如果可以则输出“YES”. 2.暴力交换两列,交换两列后,判断每行是否可以交换两个数得到递增的矩阵,如果可以则

Educational Codeforces Round 14 - F (codeforces 691F)

题目链接:http://codeforces.com/problemset/problem/691/F 题目大意:给定n个数,再给m个询问,每个询问给一个p,求n个数中有多少对数的乘积≥p 数据范围:2≤n≤10^6, 1≤ai≤3*10^6,1≤m≤10^6, 1≤p≤3*10^6 解题思路:比赛的时候比较naive的思路是把n中的数字排序去了重之后,对于每个p,最多枚举√p步,就能得到答案.而这个naive的思路是O(p√p)的,结果T了. 后来百思不得其解,去看了官方的解答.感觉是一种很有

[codeforces 200 A Cinema]暴力,优化

题意大致是这样的:有一个有n行.每行m个格子的矩形,每次往指定格子里填石子,如果指定格子里已经填过了,则找到与其曼哈顿距离最小的格子,然后填进去,有多个的时候依次按x.y从小到大排序然后取最小的.输出每次填的格子的坐标. 思路:这道题出自Codeforces Round #126 (Div. 2)是个暴力优化的题.如果指定格子未填,则填到里面.否则枚举曼哈顿距离,然后枚举格子找答案.裸的暴力太慢了,主要是因为每次曼哈顿距离都是从1开始搜索,如果每次指定的坐标都是同一个,则做了大量的重复工作.不妨

codeforces 897A Scarborough Fair 暴力签到

codeforces 897A Scarborough Fair 题目链接: http://codeforces.com/problemset/problem/897/A 思路: 暴力大法好 代码: #include <iostream> #include <stdio.h> #include <string.h> using namespace std; typedef long long ll; int n,m; string s; int main() { ios

codeforces 691F(组合数计算)

Couple Cover, a wildly popular luck-based game, is about to begin! Two players must work together to construct a rectangle. A bag with nballs, each with an integer written on it, is placed on the table. The first player reaches in and grabs a ball ra

hdu5386 Cover(暴力,观察)

题目: Cover Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1449    Accepted Submission(s): 498 Special Judge Problem Description You have an n?n matrix.Every grid has a color.Now there are two t