## Sample Input

2 5 3 2 4 5 6 4 3 4 2 5

## Sample Output

Case 1: 2
Case 2: 2

```#include <bits/stdc++.h>
using namespace std;

int main()
{
int T, kase = 0; cin >> T;
while(T--){
int n; cin >> n;
int min1 = INT_MAX, minn = INT_MAX;
for(int i = 0; i < n; ++i){
int t; cin >> t;
bitset<100> bit(t);
if(bit.count() < min1 || (bit.count() == min1 && t < minn)){
min1 = bit.count();
minn = t;
}
}
printf("Case %d: %d\n", ++kase, minn);
}
return 0;
}```

2
0 0
1 0
1 1
0 1
-1 0
0 -2
1 0
2 0

## Sample Output

YES
NO

```#include <bits/stdc++.h>
using namespace std;

struct Vec{
int a, b;
Vec(int a = 0, int b = 0):a(a), b(b){}
Vec operator - (const Vec & rhs) const {
return Vec(a - rhs.a, b - rhs.b);
}
int len() {return hypot(a, b);}
int operator * (const Vec & rhs) const {
return a * rhs.a + b * rhs.b;
}
};

inline bool isEqual(int a, int b){
return fabs(a-b)==0;
}

int main()
{
int T; cin >> T;
while(T--){
Vec p[4], v[4];
for(int i = 0; i < 4; ++i)
cin >> p[i].a >> p[i].b;
for(int i = 0; i < 4; ++i)
v[i] = p[(i+1)%4] - p[i];
bool ok = true;
int len = v[0].len();
for(int i = 0; i < 4; ++i)
if(!isEqual(v[i] * v[(i+1)%4], 0) || !isEqual(len, v[i].len()))
ok = false;
if(!ok) cout << "NO" << endl;
else cout << "YES" << endl;
}
return 0;
}
```

3
1
2
4

## Sample Output

2
4
15

一看就是递推，找规律（确实，规律我是才出来的，没有证明）

```#include <bits/stdc++.h>
using namespace std;

int d[1024], res[1024];

void init(){
d[1] = 2;
for(int i = 2; i < 1024; ++i)
d[i] = d[i-1] + i;
res[1] = 2;
for(int i = 2; i < 1005; ++i)
res[i] = res[i-1] + d[i-1];
}

int main()
{
init();
int T; cin >> T;
while(T--){
int n; cin >> n;
cout << res[n] << endl;
}
return 0;
}```

## Input

T组数据，每组数据只有一个数N（1≤T≤20,1≤N≤20），表示笑脸的边长大小。

## Sample Input

3
1
2
3

```#include <bits/stdc++.h>
using namespace std;

int main()
{
int T; cin >> T;
while(T--){
int n; cin >> n;
for(int i = 0; i < n; ++i){
for(int j = 0; j < n; ++j){
if(j == n-i-1) printf("/");
else printf(" ");
}
for(int j = 0; j < n; ++j){
if(j == i) printf("\\");
else printf(" ");
}
for(int j = 0; j < n; ++j)
printf(" ");
for(int j = 0; j < n; ++j){
if(j == n-i-1) printf("/");
else printf(" ");
}
for(int j = 0; j < n; ++j){
if(j == i) printf("\\");
else if(j < i)printf(" ");
}
printf("\n");
}
for(int i = 0; i < n-1; ++i)
printf("\n");
for(int i = 0; i < 2*n; ++i)
printf(" ");
for(int i = 0; i < n; ++i)
printf("_");
printf("\n");
if(T) printf("\n");
}
return 0;
}```

6
4815 2 1
5716 1 0
7842 1 0
4901 0 0
8585 3 3
8555 3 2
2
4815 0 0
2999 3 3 0

## Sample Output

Yes
Not sure

```#include <bits/stdc++.h>
using namespace std;

int haveDigit(int a, int b){
int cnt[10], res = 0; memset(cnt, 0, sizeof(cnt));
for(int i = 0; i < 4; ++i)
++cnt[a%10], a /= 10;
for(int i = 0; i < 4; ++i){
if(cnt[b%10]) ++res, --cnt[b%10];
b /= 10;
}
return res;
}

int samePos(int a, int b){
int cnt = 0;
for(int i = 0; i < 4; ++i){
if(a%10 == b%10) ++cnt;
a /= 10; b /= 10;
}
return cnt;
}

int main()
{
int n;
while(cin >> n, n){
int cai[128][3];
for(int i = 0; i < n; ++i)
cin >> cai[i][0] >> cai[i][1] >> cai[i][2];
int cnt = 0;
for(int i = 0; i <= 9999; ++i){
bool ok = true;
for(int j = 0; j < n; ++j){
if(!(haveDigit(i, cai[j][0])==cai[j][1]) || !(samePos(i, cai[j][0])==cai[j][2])){
ok = false;
break;
}
}
if(ok) ++cnt;
if(cnt > 1) break;
}
if(cnt == 1) puts("Yes");
else puts("Not sure");
}
return 0;
}```

2
4
2 3 1 4
3 2 1 4
4
1 3 4 2
1 7 2 4

## Sample Output

1
2

归并排序求逆序对数，貌似是一年的noip题目。

```#include <bits/stdc++.h>
using namespace std;

struct One{
int len, pos;
bool operator < (const One & rhs) const {
return len < rhs.len;
}
};

const int mod = 99999997;
const int maxn = 102400;
One a[maxn], b[maxn];
int c[maxn], t[maxn], cnt;

void mergeSort(int x, int y){
if(y - x > 1){
int m = x + (y-x) / 2;
int p = x, q = m, i = x;
mergeSort(x, m);
mergeSort(m, y);
while(p < m || q < y){
if(q >= y || (p < m && c[p] <= c[q]))
t[i++] = c[p++];
else t[i++] = c[q++], cnt = (cnt + m - p) % mod;
}
for(i = x; i < y; ++i) c[i] = t[i];
}
}

int main()
{
//freopen("in", "r", stdin);
int T; cin >> T;
while(T--){
int n; cin >> n;
for(int i = 0; i < n; ++i)
cin >> a[i].len, a[i].pos = i;
for(int i = 0; i < n; ++i)
cin >> b[i].len, b[i].pos = i;
sort(a, a + n); sort(b, b + n);
for(int i = 0; i < n; ++i)
c[a[i].pos] = b[i].pos;
cnt = 0;
mergeSort(0, n);
cout << cnt << endl;
}
return 0;
}```

5
threehorses
goodsubstrings
secret
primematrix
beautifulyear
4
aa
bdefghijklmn
opqrstuvwxyz
c
0

## Sample Output

j
ab

挺好的一道题，用set保存，用BFS搜索查询

```#include <bits/stdc++.h>
using namespace std;

set<string> s;

int main()
{
int n;
while(s.clear(), cin >> n, cin.get(), n){
while(n--){
string str; cin >> str;
for(unsigned i = 0; i < str.size(); ++i)
for(unsigned j = i + 1; j <= str.size(); ++j)
s.insert(str.substr(i, j - i));
}
queue<string> qu;
for(int i = 0; i < 26; ++i)
qu.push(string().append(1, 'a'+i));
while(true){
string cur = qu.front(); qu.pop();
if(!s.count(cur)){
cout << cur << endl;
break;
}
for(int i = 0; i < 26; ++i)
qu.push(cur + char('a'+i));
}
}
return 0;
}```

## Description

IP是英文Internet Protocol的缩写，意思是“网络之间互连的协议”，也就是为计算机网络相互连接进行通信而设计的协议。在因特网中，它是能使连接到网上的所有计算机网络实现相互通信的一套规则，规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统，只要遵守IP协议就可以与因特网互连互通。正是因为有了IP协议，因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。因此，IP协议也可以叫做“因特网协议”。

IP地址被用来给Internet上的电脑一个编号。大家日常见到的情况是每台联网的PC上都需要有IP地址，才能正常通信。我们可以把“个人电脑”比作“一台电话”，那么“IP地址”就相当于“电话号码”，而Internet中的路由器，就相当于电信局的“程控式交换机”。

IP地址是一个32位的二进制数，通常被分割为4个“8位二进制数”（也就是4个字节）。IP地址通常用“点分十进制”表示成（a.b.c.d）的形式，其中，a,b,c,d都是0~255之间的十进制整数。例：点分十进IP地址（100.4.5.6），实际上是32位二进制数（01100100.00000100.00000101.00000110）。

1 IP地址由四个整数跟三个'.'组成，就是“a.b.c.d”的形式。

2 a,b,c,d四个部分的数字位数都可以是1～3位，其整数值都在0～255之间。

3 不能有除了数字和'.'之外的字符出现。

192.168.100.16

## Sample Output

YES

看现在的题目表述多么清晰，真是气死人了，比赛也不说清楚，水题一道！

```#include <bits/stdc++.h>
using namespace std;

int main()
{
char ip[1000];
while(gets(ip)){
int len = strlen(ip);
int dotCnt(0), num(0), cnt(0);
bool ok = true;
for(int i = 0; i <= len; ++i){
if(!isdigit(ip[i]) && ip[i]!=0 && ip[i]!='.'){
ok = false;
break;
}
if(ip[i]=='.' || ip[i]==0){
++dotCnt;
if(cnt > 3 || cnt < 1 || num > 255 || num < 0){
ok = false;
break;
}
num = 0; cnt = 0;
}
else num = num * 10 + ip[i] - '0', ++cnt;
}
if(dotCnt==4 && ok) puts("YES");
else puts("NO");
}
return 0;
}```

## Description

ACM集训队有个小伙暗恋同班的姑娘，但是苦于害羞腼腆不敢直抒胸臆。于是小伙打算写一首英文情诗给她。为了使这首情诗高端霸气上档次，小伙经过三天三夜的精心创作写了一首藏头的情诗。请问你能看出他想要表达的真正内容吗？

## Sample Input

1
8
I am a handsome man
lonely and long for you attention
of all the girls I met you gave me the deepest impression
Very lucky to know you
earn money to make you happy
you are the world
oh be ma side
u are the happiest person in the world

## Sample Output

IloVeyou

```#include <bits/stdc++.h>
using namespace std;

int main()
{
int T; cin >> T;
while(T--){
int n; cin >> n; cin.get();
string res, str;
while(n--){
getline(cin, str);
res += str[0];
}
cout << res << endl;
}
return 0;
}```