Codeforces 라운드 # 569 (사업부. 2) B. 닉과 배열

Codeforces 라운드 # 569 (사업부. 2)

 

B. 닉과 배열

닉 [A1, A2 ...,] A =을 정수의 멋진 배열을받은 선물로 그의 어머니 그의 5 생일. 그는 이미 다양한 속성을 탐구하려고했지만 제품 a1⋅a2⋅은 ... 요소의 충분히 그를 크지 않을 듯하기 때문에 개봉 후 그는 많이 실망했다.

그는 배열을 던질 준비가되어 있었다, 그러나 그의 어머니는 그를 안심. 그녀는 그 배열이 다음과 같은 작업 후에 버릇되지 않을 것이다, 그에게 말했다 : 나는 (1≤i≤n) 및 할 인공 지능 어떤 인덱스 선택 : = - AI-1.

예를 들어, 그 1and I = I = 3으로 색인 요소이 동작을 적용한 후 배열 [-4, -1,3,1]에 [3 -4,1, -1]이 배열을 바꿀 수있다.

니콜라이 즉시 때때로 배열 많은의 정수의 제품을 높일 수 있다고 이해했다. 이제 그는 그가 요소 만이 작업 (아마도 0, 1 번 이상, 그가 원하는만큼)를 사용하여 정수의 최대 가능한 제품으로 배열을하고 싶어 결정했다, 몇몇이 작업을 수행하는 것이 금지되지 않는다 같은 인덱스를위한 시간.

콜야 도움 소자의 최대 가능한 제품과 배열을 인쇄하는 a1⋅a2⋅ ... 어떤 순서 만이 동작을 이용하여 수신 할 수있는.

복수 응답이있는 경우, 그 중 하나를 인쇄 할 수 있습니다.

입력

어레이의 정수 개수 - 첫 번째 라인은 정수 n (1≤n≤105)을 포함한다.

배열의 요소 - 번째 행은 N 개의 정수 A1, A2, ..., (-106≤ai≤106)를 포함

산출

인쇄 N 번호 - 지정된 배열 어떤 순서 만이 동작을 이용하여 수신 할 수있는 요소들의 최대 수와 제품 배열의 요소.

복수 응답이있는 경우, 그 중 하나를 인쇄 할 수 있습니다.

입력

4

2 2 2 2

산출

-2 -2 -2 -2

입력

1

0

산출

0

입력

-3 -3 2

산출

-3 -3 2

 

문제의 의미는 : NUM = -num-1의 시퀀스의 최대 수 n의 제품 후 작업을 통해 출력을 보자 제목의 수는 N은 숫자 중 하나에서 작동 할 수 있습니다, 당신에게 의미

아이디어 : 작업이 마이너스가 후에는, 양수 또는 제로 분명히 경우는 절대 증가이기 때문에, 플러스의 절대 값은, 우리는,이 숫자가 음수되고있다 놓아야합니다

그래서 제품의 절대 값이 가장 큰이며 이 제품이, 우리는 n이 짝수 경우, 제품 확인에 긍정적 무엇 N을 결정해야 음수가 될 수 없습니다 분명하다;

n이 홀수 인 경우에는, 여기서 n의 음수의 최대 절대 값을 찾아야 동작이 양이 된 후, 그 생성물은 양을 최대가 ......

 

 

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<map>
 7 #include<set>
 8 #include<vector>
 9 #include<queue>
10 using namespace std;
11 #define ll long long 
12 const int mod=1e9+7;
13 const int inf=1e9+7;
14 
15 const int maxn=1e5+5;
16 
17 int num[maxn];
18 
19 int main()
20 {
21     ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
22     
23     int n;
24     
25     while(cin>>n)
26     {
27         
28         for(int i=0;i<n;i++)
29         {
30             cin>>num[i];
31             if(num[i]>=0)
32                 num[i]=-num[i]-1;
33         }
34         
35         if(n&1)
36         {
37             int minn=-1;
38             int mark_i=0;
39             
40             for(int i=0;i<n;i++)
41             {
42                 if(num[i]<minn)
43                 {
44                     minn=num[i];
45                     mark_i=i;
46                 }
47             }
48             
49             num[mark_i]=-num[mark_i]-1;
50             
51         }
52         
53         for(int i=0;i<n-1;i++)
54             cout<<num[i]<<" ";
55         cout<<num[n-1]<<endl;
56         
57     }
58     
59     return 0;
60 }

 

추천

출처www.cnblogs.com/xwl3109377858/p/11070253.html