Submission #70636254
Source Code Expand
Copy
#include <stdio.h>#include <stdlib.h>/* 降順 */int cmp(const void* x, const void* y) {int a = *(const int*)x, b = *(const int*)y;return (a < b) - (a > b);}#define MOD_BY 1000000007int add(int a, int b) {return a + b - MOD_BY * (a + b >= MOD_BY);}int mul(int a, int b) {return (int)((long long)a * b % MOD_BY);}int N;int C[212345];
#include <stdio.h>
#include <stdlib.h>
/* 降順 */
int cmp(const void* x, const void* y) {
int a = *(const int*)x, b = *(const int*)y;
return (a < b) - (a > b);
}
#define MOD_BY 1000000007
int add(int a, int b) {
return a + b - MOD_BY * (a + b >= MOD_BY);
}
int mul(int a, int b) {
return (int)((long long)a * b % MOD_BY);
}
int N;
int C[212345];
int twon[212345];
int main(void) {
int i;
int ans = 0;
int mult = 1, num = 1;
if (scanf("%d", &N) != 1) return 1;
for (i = 0; i < N; i++) {
if (scanf("%d", &C[i]) != 1) return 1;
}
qsort(C, N, sizeof(*C), cmp);
twon[0] = 1;
for (i = 1; i <= N; i++) twon[i] = mul(twon[i - 1], 2);
for (i = 0; i < N; i++) {
ans = add(ans, mul(mul(C[i], mult), twon[N - i -1]));
mult = add(mul(mult, 2), num);
num = mul(num, 2);
}
printf("%d\n", mul(ans, twon[N]));
return 0;
}
/*
自分より小さいのがある → それを先に
1:1個×1、2個(全部可)×2、3個(全部可)×1
2:1個×1、2個(1以外)×1
3:1個×1
パスカルの三角形 → 上からn段目の合計は2**nじゃね?
大きい方からn番目 → 2**n を掛ける
これは、Sを全部0に固定した場合
Sを変えていく → xorするだけで実質同じ
よって、2**Nを掛ければよい
↑大嘘?答えが合わない
1 2 のとき
1 → 1×1=1
2 → 2×1=2
1 2 → 1×2+2×1=4
1:1×1+1×2 (1+2)
2:2×1+2×1 (1+1)
たしかに、明らかにさっきの見積もりと違う
自分より大きいものの数 → 係数に加算される (※)
自分より小さいものの数 → 係数に加算されない (パターン数を増やすのみ)
※について
既に計算済みの部分に、1ビット追加することを考える
追加ビットが0 → 重み・パターン数ともに変わらない
追加ビットが1 → パターン数が同じで、重みが全て1ずつ増える
したがって
重み += 重み + パターン数
パターン数 *= 2
*/
Submission Info
| Submission Time | |
|---|---|
| Task | E - Change a Little Bit |
| User | mikecat |
| Language | C (gcc 12.2.0) |
| Score | 500 |
| Code Size | 2052 Byte |
| Status | AC |
| Exec Time | 47 ms |
| Memory | 3348 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 500 / 500 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | s1.txt, s2.txt, s3.txt |
| All | 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, s1.txt, s2.txt, s3.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01.txt | AC | 0 ms | 1628 KiB |
| 02.txt | AC | 0 ms | 1596 KiB |
| 03.txt | AC | 0 ms | 1728 KiB |
| 04.txt | AC | 0 ms | 1624 KiB |
| 05.txt | AC | 0 ms | 1732 KiB |
| 06.txt | AC | 0 ms | 1600 KiB |
| 07.txt | AC | 0 ms | 1652 KiB |
| 08.txt | AC | 0 ms | 1628 KiB |
| 09.txt | AC | 0 ms | 1716 KiB |
| 10.txt | AC | 0 ms | 1580 KiB |
| 11.txt | AC | 1 ms | 1700 KiB |
| 12.txt | AC | 1 ms | 1684 KiB |
| 13.txt | AC | 1 ms | 1756 KiB |
| 14.txt | AC | 1 ms | 1652 KiB |
| 15.txt | AC | 1 ms | 1836 KiB |
| 16.txt | AC | 45 ms | 3156 KiB |
| 17.txt | AC | 46 ms | 3348 KiB |
| 18.txt | AC | 47 ms | 3304 KiB |
| 19.txt | AC | 36 ms | 3276 KiB |
| 20.txt | AC | 25 ms | 3292 KiB |
| 21.txt | AC | 0 ms | 1572 KiB |
| 22.txt | AC | 21 ms | 3288 KiB |
| s1.txt | AC | 0 ms | 1736 KiB |
| s2.txt | AC | 0 ms | 1604 KiB |
| s3.txt | AC | 0 ms | 1716 KiB |