D. Zero Quantity Maximization ( Codeforces Round #544 (Div. 3) )


제목 링크
참고 문제 풀이
 
제목:
성형 수조 a 와 성형 수조 b, c [i] = d * a [i] + b [i], 제발  c [i] = 0 때  같은 d 의 수량 은 최대 몇 개 까지 있 을 수 있다.
 
생각:
1. 먼저 다른 사람의 블 로 그 를 엽 니 다.
  2..........
처음에는 자신 이 해 보 았 는 지 안 해 보 았 는 지 다른 사람의 블 로그 분석 을 보고 자신 이 연 결 된 것 을 발견 했다.  d = - b [i] / a [i] 를 잘못 밀 었 어 요.  kx (키다리) 이 문 제 를 맵 으로 저장 하 라 고 알려 주세요.  그래서 보충 한 후에 한 발 을 건 네 주 었 습 니 다. WA5 는 a [i] 와 b [i] 가 0 일 때 를 고려 하지 않 았 기 때 문 입 니 다.  이 부분 을 해 보고 하나 더 내 겠 습 니 다. WA 37. 이번 에는 정밀도 문제 때 문 입 니 다.  10000000 99999999 와 99999999999998 의 값 이 같 아서 double 로 하 는 방법 을 뒤 집 었 다.   최종 결 과 는 a [i] 와 b [i] 를 모두 공약수 로 나 누고 pair 로 map 배열 에 저장 하 는 것 이다.
 
 
#include
#include
#include 
#include
#include
#include
#include<string>
#include
#include<set>
#include
#include
#include
#include
using namespace std;
#define ll long long
#define mem(a,x) memset(a,x,sizeof(a))
#define se second
#define fi first
typedef pair<int,int> pii;
const ll mod=998244353;
const int INF= 0x3f3f3f3f;
const int N=2e5+5;

int n;
int a[N];
int b[N];
mapint,int> , int> num;

priority_queue<int>q;

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
        scanf("%d",&b[i]);
    
    int maxn=0;
    int cnt=0;
    for(int i=1;i<=n;i++)
    {
        if(a[i]==0)
        {
            if(b[i]==0) cnt++;
        }
        else if(b[i]==0)
        {
            num[ pair<int,int>(1,0) ]++;
            maxn=max(maxn,num[ pair<int,int>(1,0) ] );
        }
        else
        {
            // int c= ,       。。 
            int c= ++num [ pair<int,int>(a[i]/__gcd(a[i],b[i]) , b[i]/__gcd(a[i],b[i]) )];
            maxn=max(maxn,c);
        }
        
    }
    cout<endl;
    
}

 
다음으로 전송:https://www.cnblogs.com/thunder-110/p/10500302.html

좋은 웹페이지 즐겨찾기