Please sign in first.
Submission #1038277
Source Code Expand
#include <cstdlib>
#include <iostream>
#include <vector>
int findMinNum(int a) {
while (a&(a - 1)) a = a&(a - 1);
return a;
}
int N;
int question_start = 0;
int question_end = 0;
int range = 0;
int answer = 0;
int temp = 0;
int question(int l, int r){
question_start = l; question_end = r;
std::cout << "? " << question_start << " " << question_end << std::endl;
std::cin >> temp;
return temp;
}
bool dfs(int l, int r, int nokori, int flag){
std::cerr << l << " " << r << " " << nokori << " " << flag << std::endl;
int nr, nl;
if (r == l) return true;
if (nokori == 0) return false;
//small side
int dist = findMinNum(r - l);
nl = l + dist;
nr = r;
if(dfs(nl, nr, nokori-1, flag)){
answer += question(l, l + dist) * flag;
return true;
}
dist *= 2;
nl = r - dist;
nr = l;
if (dfs(nl, nr, nokori - 1, -flag)) {
answer += question(r - dist, r) * flag;
return true;
}
return false;
}
int main() {
//まず,数列の長さを表す整数 N が標準入力に与えられる.
std::cin >> N;
//最初に最大の2の冪の質問をする
for (int i = 1; i <= N; i *= 2) {
question_end = i;
}
range = question_end - question_start;
std::cout << "? 0 " << question_end << std::endl;
std::cin >> temp;
answer += temp;
//最初で全ての答えを求められた場合、終了する
if (question_end == N) {
std::cout << "! " << answer << std::endl;
return EXIT_SUCCESS;
}
int start = question_end;
int end = N;
int flag = 1;
dfs(start, end, 8, flag);
//次に最大の2の冪まで計算する
std::cout << "! " << answer << std::endl;
return EXIT_SUCCESS;
}
Submission Info
| Submission Time | |
|---|---|
| Task | A - Array Sum |
| User | iroha_team |
| Language | C++14 (GCC 5.4.1) |
| Score | 100 |
| Code Size | 1705 Byte |
| Status | AC |
| Exec Time | 8 ms |
| Memory | 1228 KiB |
Judge Result
| Set Name | All | ||
|---|---|---|---|
| Score / Max Score | 100 / 100 | ||
| Status |
|
| Set Name | Test Cases |
|---|---|
| All | 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01-01.txt | AC | 7 ms | 720 KiB |
| 01-02.txt | AC | 6 ms | 720 KiB |
| 01-03.txt | AC | 7 ms | 596 KiB |
| 01-04.txt | AC | 7 ms | 596 KiB |
| 01-05.txt | AC | 7 ms | 972 KiB |
| 01-06.txt | AC | 8 ms | 976 KiB |
| 01-07.txt | AC | 7 ms | 976 KiB |
| 01-08.txt | AC | 7 ms | 976 KiB |
| 01-09.txt | AC | 7 ms | 976 KiB |
| 01-10.txt | AC | 7 ms | 976 KiB |
| 01-11.txt | AC | 7 ms | 1140 KiB |
| 01-12.txt | AC | 7 ms | 1140 KiB |
| 01-13.txt | AC | 8 ms | 1100 KiB |
| 01-14.txt | AC | 7 ms | 1224 KiB |
| 01-15.txt | AC | 7 ms | 1100 KiB |
| 01-16.txt | AC | 7 ms | 1228 KiB |
| 01-17.txt | AC | 7 ms | 1140 KiB |
| 01-18.txt | AC | 7 ms | 1228 KiB |
| 01-19.txt | AC | 7 ms | 852 KiB |
| 01-20.txt | AC | 7 ms | 972 KiB |
| 01-21.txt | AC | 7 ms | 1140 KiB |
| 01-22.txt | AC | 7 ms | 976 KiB |
| 01-23.txt | AC | 8 ms | 976 KiB |
| 01-24.txt | AC | 7 ms | 1140 KiB |