> 目前只提供 *C 或 CPP* 的程式碼
> 想提供更快 *cp* 值更高的解法請再使用下方的 *Gmail* 聯繫我
> 主旨請打 : *IONC HackMD* 筆記程式碼並註明是哪一題
> 附上 *Code* 跟 *AC* 截圖就有機會登板喔 !
> * 題目總覽 : [***PDF***](https://drive.google.com/file/d/12Fq4iqB-OnV0GytPIOkdwIWURYHhplrt/view?usp=sharing)
> * 聯繫方式 : ***ivypeter1546@gmail.com***
# ***Q1*** *A1*
```clike=
#include <stdio.h>
int main()
{
printf("He11o, IONC!\n");
return 0;
}
```
# ***Q2*** *A2*
```clike=
// 確認的點=>如果一直勝利逆轉事件要繼續加嗎
#include <stdio.h>
#include <stdlib.h>
int arr[300];
int main()
{
int n, even = 1, turn = 0, LCwin = 0, ACwin = 0, max = 0;
scanf("%d", &n);
int temp, checkfirst;
int now;
scanf("%d", &now);
if (now == 1)
temp = 1;
else if (now == 2)
temp = 2;
arr[0]++;
checkfirst = temp;
for (int j = 0; j < n - 1; j++)
{
scanf("%d", &now);
if (now == 1 && temp == 1)
{
arr[turn]++;
}
else if (now == 2 && temp == 1)
{
turn++;
temp = 2;
arr[turn]++;
}
else if (now == 1 && temp == 2)
{
turn++;
temp = 1;
arr[turn]++;
}
else if (now == 2 && temp == 2)
{
arr[turn]++;
}
}
if (checkfirst == 1)
{
for (int j = 0; j <= turn; j++)
{
if (j % 2 == 0)
ACwin += arr[j];
else
LCwin += arr[j];
if (checkfirst == 1)
{
if (LCwin > ACwin)
{
checkfirst = 2;
even++;
if (arr[j] > max)
max = arr[j];
}
}
else if (checkfirst == 2)
{
if (ACwin > LCwin)
{
checkfirst = 1;
even++;
if (arr[j] > max)
max = arr[j];
}
}
if (ACwin == LCwin)
even++;
}
}
else if (checkfirst == 2)
{
for (int j = 0; j <= turn; j++)
{
if (j % 2 == 0)
LCwin += arr[j];
else
ACwin += arr[j];
if (checkfirst == 1)
{
if (LCwin > ACwin)
{
checkfirst = 2;
even++;
if (arr[j] > max)
max = arr[j];
}
}
else if (checkfirst == 2)
{
if (ACwin > LCwin)
{
checkfirst = 1;
even++;
if (arr[j] > max)
max = arr[j];
}
}
if (ACwin == LCwin)
even++;
}
}
printf("%d %d\n", ACwin, LCwin);
printf("%d\n%d\n", even, max);
return 0;
}
```
# ***Q3*** *A3*
```clike=
// a,b可能是0
#include <stdio.h>
#include <string.h>
char a[1000005];
char b[1000005];
int main()
{
scanf("%s", a);
scanf("%s", b);
// i,j => a,b長度
// al,bl => a,b起始值
// ar,br => a,b結尾
/*
al =>i
bl =>j
i =>ar
j =>br
ar =>al
br =>bl
*/
int i = 0;
int j = 0;
int ar, br;
int change = 1;
for (ar = 0; a[ar] != '\0'; ar++)
{
if (change)
{
if (a[ar] != '0')
{
i += 1;
change = 0;
}
}
else
i += 1;
}
change = 1;
for (br = 0; b[br] != '\0'; br++)
{
if (change)
{
if (b[br] != '0')
{
j += 1;
change = 0;
}
}
else
j += 1;
}
int al = ar - i;
int bl = br - j;
// printf("i=%d j=%d\n", i, j);
// printf("al=%d ar=%d\n", al, ar);
// printf("bl=%d br=%d\n", bl, br);
if (i == 0 && j == 0)
{
printf("=\n");
}
else if (i > j)
{
printf(">\n");
// printf("check 1\n");
}
else if (j > i)
{
printf("<\n");
// printf("check 2\n");
}
else
{
int check = 1;
int count = 0;
while (check)
{
if (a[al] > b[bl])
{
printf(">\n");
check = 0;
}
else if (a[al] < b[bl])
{
printf("<\n");
check = 0;
}
else
{
count += 1;
// printf("count=%d\n", count);
if (count == i)
{
printf("=\n");
check = 0;
}
}
al++;
bl++;
}
// printf("check 3\n");
}
return 0;
}
```
# ***Q4*** *A4*
```clike=
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int input[200005];
int cmp(const void *a, const void *b)
{
return (*(int *)a - *(int *)b);
}
int main()
{
int n, k;
scanf("%d %d", &n, &k);
// input[0] = 0;
for (int i = 0; i < n; i++)
scanf("%d", &input[i]);
qsort(input, n, sizeof(int), cmp);
/*for (int i = 0; i < n; i++)
printf("%d ", input[i]);
printf("\n");*/
// 1~n
// 比較優先順序
// 最強
if (k == n)
{
printf("%d\n", input[k - 1]);
}
// 最爛
else if (k == 0)
{
if (input[k] == 1)
printf("-1\n");
else
printf("%d", input[k] - 1);
}
// 中間中間
else if ((input[k] - input[k - 1]) < 2)
{
if (input[k] - input[k - 1] == 1)
printf("%d\n", input[k - 1]);
else
printf("-1\n");
}
else
printf("%d\n", input[k] - 1);
return 0;
}
```
# ***Q5*** *B1*
```clike=
#include <stdio.h>
#include <stdlib.h>
// p[n] n個點, n-1條邊
// c[n] n個點, n條邊
// k[n] n個點, Cn取2條邊
// K[n][m] n+m個點, n*m條邊
#define int long long
int main()
{
int t;
scanf("%lld", &t);
while (t--)
{
char ch;
int n, m;
scanf(" %c", &ch);
if (ch == 'P')
{
scanf("[%lld]", &n);
printf("%lld %lld\n", n, n - 1);
}
else if (ch == 'C')
{
scanf("[%lld]", &n);
printf("%lld %lld\n", n, n);
}
else if (ch == 'K')
{
scanf("[%lld]", &n);
char tmp;
scanf("%c", &tmp);
if (tmp == '[')
{
scanf("%lld]", &m);
printf("%lld %lld\n", n + m, n * m);
}
else
{
if (n < 2)
printf("%lld 0\n", n);
else
printf("%lld %lld\n", n, ((n - 1) * n) / 2);
}
}
}
return 0;
}
```
# ***Q6*** *B2*
```clike=
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int input[1000001];
char ch[5];
int main()
{
int n;
scanf("%d", &n);
int low = 1, up = n;
int guess;
int check = 1;
int nc = 1;
while (check)
{
// 如果前一次範圍完全沒變=>猜別的數字
if (nc)
guess = (low + up) / 2;
else
{
nc = 1;
if (guess + 1 <= up)
guess += 1;
else if (guess - 1 >= low)
guess -= 1;
else
{
printf("! %d\n", guess);
break;
}
}
printf("%d\n", guess);
fflush(stdout);
// 初始化ch
for (int i = 0; i < 5; i++)
ch[i] = '\0';
scanf("%s", ch);
// 判斷式
if (ch[0] == '=')
{
printf("! %d\n", guess);
check = 0;
}
else if (ch[0] == '<')
{
if (ch[1] == '=')
{
if (guess == up)
nc = 0;
up = guess;
}
else
up = guess - 1;
}
else if (ch[0] == '>')
{
if (ch[1] == '=')
{
if (guess == low)
nc = 0;
low = guess;
}
else
low = guess + 1;
}
if (up == low)
{
printf("! %d\n", low);
check = 0;
}
}
return 0;
}
```
# ***Q7*** *B3*
> 註 : 此題還卡在 *TLE* 地獄中,程式碼僅做參考
```clike=
#include <stdio.h>
#include <stdlib.h>
#define int unsigned
int ind = 1;
int for_count[100005][5];
int add[100005];
int check = 0;
int main()
{
int x = 0;
char point[5];
// int number = 1;
int l;
scanf("%u", &l);
for (int i = 1; i <= l; i++)
{
scanf(" %s", point);
if (check != 1 && point[0] == 'a')
add[i] = 1;
else if (check != 1 && point[0] == 'f')
{
for_count[ind][0] = i;
scanf("%u", &for_count[ind][1]);
ind += 1;
}
else if (check != 1 && point[0] == 'e')
{
for (int j = (for_count[ind - 1][0] + 1); j < i; j++)
{
if (add[j] != 0)
{
if (for_count[ind - 1][1] > (4294967295 / add[j]))
{
check = 1;
break;
}
else
add[j] *= for_count[ind - 1][1];
}
}
ind -= 1;
}
/*
printf("inde=%d\n", ind);
for (int j = 1; j <= i; j++)
{
printf("add[%d]=%d ", j, add[j]);
}
printf("\n");
for (int j = 1; j < ind; j++)
{
printf("for_count[%d]=(%d,%d) ", j, for_count[j][0], for_count[j][1]);
}
printf("\n");*/
}
if (check != 1)
{
for (int i = 1; i <= l; i++)
{
if (add[i] > (4294967295 - x))
{
check = 1;
break;
}
else
x += add[i];
}
}
if (check)
{
printf("OVERFLOW!!!\n");
}
else
printf("%u\n", x);
return 0;
}
```