# 2016 "Bird Cup" ICPC7th@ahstu--“波导杯”安徽科技学院第七届程序设计大赛

2016-04-25 09:38:57      个评论    来源：Fayne

## Sample Input

``````otdarrreoddtooaaoooee
rolereoreolrereoreol
``````

## Sample Output

``````Dotaer: 2
Loler: 1
Dotaer win
``````

## Source

icpc7th@ahstu

``````    #include
#include
#include
#include
using namespace std;
void init(vector &A,int num)
{
for(int i=0;i<=num;i++){
A.push_back(i);
}
}
void game(vector A,int *way,int n,int first)
{
int index;
A.erase(A.begin()+first);
index=first-1;
for(int i=0;i A;
int way[100];
while(cin>>num>>first>>n)
{
for(int i=0;i>way[i];

init(A,num);
game(A,way,n,first);
A.clear();
}
return 0;
}``````

# so so so easy

Time Limit:1000MS Memory Limit:65536K
Total Submit:46 Accepted:14

## Sample Input

``````so so so easy so so
``````

## Sample Output

``````1 2 3 1 1 2
``````

## Source

icpc7th@ahstu

``````    #include
#include
#include
#include
using namespace std;
void init(vector &A,int num)
{
for(int i=0;i<=num;i++){
A.push_back(i);
}
}
void game(vector A,int *way,int n,int first)
{
int index;
A.erase(A.begin()+first);
index=first-1;
for(int i=0;i A;
int way[100];
while(cin>>num>>first>>n)
{
for(int i=0;i>way[i];

init(A,num);
game(A,way,n,first);
A.clear();
}
return 0;
}``````

# 反转链表

Time Limit:1000MS Memory Limit:65536K
Total Submit:5 Accepted:0

## Sample Input

``````00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
``````

## Sample Output

``````00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
``````

## Source

icpc7th@ahstu

``````    #include
#include
#include
#include
#include
#include
using namespace std;

typedef struct
{
int data;
int next;
}Node;
Node L[100001];
vectorN;
vector::iterator it;
{
Node N;
}
return 1;
}
void L_sort(int start,int n)
{
int flag=start;
while(flag!=-1)
{
N.push_back(L[flag]);
flag=L[flag].next;
}
}
void F_sort(int n)
{
int G=N.size()/n;
for(int i=0;i<g;i++) {="" reverse((n.begin()+i*n),(n.begin()+(i+1)*n));="" }="" void="" print()="" for(it="N.begin();it>Add>>num>>n)
{
F_sort(n);
print();
N.clear();
}
return 0;
}
``````

# 贪吃蛇

Time Limit:1000MS Memory Limit:65536K
Total Submit:9 Accepted:2

## Sample Input

``````4 4
1 2 3 7
3 4 2 1
1 5 4 8
10 3 0 3
``````

## Sample Output

``````28
(1,1)
(2,1)
(2,2)
(3,2)
(3,3)
(3,4)
(4,4)
``````

## Source

icpc7th@ahstu

``````    #include
#include
#include
#include
#include
using namespace std;
typedef struct
{
int m_sum;
vector way;
}MP;
int mp[102][102];
MP Mp[102][102];
int N,M;
string change(int a)
{
string A;
while(a!=0)
{
A+=((a%10)+'0');
a/=10;
}
reverse(A.begin(),A.end());
return A;
}
void scan()
{
for(int i=0;i<=M;i++)
mp[0][i]=0;
for(int i=0;i<=N;i++)
mp[i][0]=0;
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
cin>>mp[i][j];
}
}
void hand_mp()
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
{
Mp[i][j].m_sum=mp[i][j]+((mp[i][j-1]>=mp[i-1][j])?mp[i][j-1]:mp[i-1][j]);
mp[i][j]= Mp[i][j].m_sum;
Mp[i][j].way=(mp[i][j-1]>=mp[i-1][j])?(Mp[i][j-1]).way:(Mp[i-1][j]).way;
Mp[i][j].way.push_back(change(i));
Mp[i][j].way.push_back(change(j));
}
}
}
void print()
{
cout<>N>>M)
{
scan();
hand_mp();
print();
}
return 0;
}
``````

# 均分硬币

Time Limit:1000MS Memory Limit:65536K
Total Submit:14 Accepted:4

## Sample Input

``````4
9 8 17 6
``````

## Sample Output

``````3
``````

## Source

icpc7th@ahstu

``````    #include
#include
using namespace std;
int avg(int *A,int n)
{
int sum=0;
int avge;
int flag=0;
for(int i=0;i>N)
{
for(int i=0;i>A[i];
avg(A,N);
}
return 0;
}
``````

# 丢啊丢啊丢手绢

Time Limit:1000MS Memory Limit:65536K
Total Submit:17 Accepted:4

## Sample Input

``````6 2 3
2 3 4
``````

## Sample Output

``````5 6
``````

## Source

icpc7th@ahstu

``````    #include
#include
#include
#include
using namespace std;
void init(vector &A,int num)
{
for(int i=0;i<=num;i++){
A.push_back(i);
}
}
void game(vector A,int *way,int n,int first)
{
int index;
A.erase(A.begin()+first);
index=first-1;
for(int i=0;i A;
int way[100];
while(cin>>num>>first>>n)
{
for(int i=0;i>way[i];

init(A,num);
game(A,way,n,first);
A.clear();
}
return 0;
}``````

# 分糖果

Time Limit:1000MS Memory Limit:65536K
Total Submit:0 Accepted:0

## Description

(<=10^4) 三个小屁孩想要吃到糖，就必须按小杨的要求每次把任意一堆糖的一半放到其他糖堆里，最终使三堆糖的数量和小杨所要求的完全一致，才被允许吃.
(若一堆糖为奇数个，它的一半为较少的那部分）。那么他们最少需要移动多少次才能吃到糖果。

## Sample Input

``````6 10 3
6 5 8

1 2 5
3 0 5
``````

## Sample Output

``````1
Unfind
``````

## Source

icpc7th@ahstu

``````    #include
#include
#include
#include
#include
#include
using namespace std;

typedef struct
{
int step;
int candy[3];
} ST;
mapmp;
int init[3];
int target[3];
void state(ST &S,int i)
{
int f,s,t;
f=S.candy[0];
s=S.candy[1];
t=S.candy[2];
S.step++;
switch(i)
{
case 1:
S.candy[0]=f-f/2;
S.candy[1]=s+f/2;
break;
case 2:
S.candy[0]=f+s/2;
S.candy[1]=s-s/2;
break;
case 3:
S.candy[0]=f-f/2;
S.candy[2]=t+f/2;
break;
case 4:
S.candy[0]=f+t/2;
S.candy[2]=t-t/2;
break;
case 5:
S.candy[1]=s-s/2;
S.candy[2]=t+s/2;
break;
case 6:
S.candy[1]=s+t/2;
S.candy[2]=t-t/2;
break;
}
}
int Search(int *init,int *target,queue &Q,int &STEP)
{
ST flag;
string fl,l;
flag.step=0;
flag.candy[0]=init[0];
flag.candy[1]=init[1];
flag.candy[2]=init[2];
Q.push(flag);
for(int i=0; i<3; i++)
{
char b[15];
sprintf(b,"%d",flag.candy[i]);
fl+=b;
}
mp[fl]=1;
if(flag.candy[0]==target[0]&&flag.candy[1]==target[1]&&flag.candy[2]==target[2])
{
STEP=flag.step;
return 1;
}
while(!Q.empty())
{
flag=Q.front();
for(int i=1; i<=6; i++)
{
state(flag,i);
if(flag.candy[0]==target[0]&&flag.candy[1]==target[1]&&flag.candy[2]==target[2])
{
STEP=flag.step;
return 1;
}
fl="";
for(int i=0; i<3; i++)
{
char b[15];
sprintf(b,"%d",flag.candy[i]);
fl+=b;
}
if(mp[fl]!=1)
{
Q.push(flag);
mp[fl]=1;
}
flag=Q.front();
}
Q.pop();
}
return 0;
}
int main()
{
int f,s,t;
int F,S,T;
int STEP;
// freopen("分糖果.in","r",stdin);
//freopen("分糖果.out","w",stdout);
while(cin>>f>>s>>t>>F>>S>>T)
{
if((f+s+t)!=(F+S+T))
{
cout<<"Unfind"< Q;
init[0]=f;
init[1]=s;
init[2]=t;
target[0]=F;
target[1]=S;
target[2]=T;
if(Search(init,target,Q,STEP))
cout<``````

# `埋炸弹啦~`

```Time Limit:1000MS Memory Limit:65536K Total Submit:47 Accepted:18```

## `Description`

```小明是个埋弹专家同时也是个数学爱好者，他每次进行埋弹任务时都喜欢数字决定埋在哪里，他会选出两个数字然后分别把它们转化成八位二进制数，第一个作为横向坐标(从左往右)， 第二个作为纵向(从上往下)坐标构成一个8*8的矩阵，而他埋弹的位置当然就是横竖坐标中1的交叉点。请把他埋的位置表示出来，炸弹位置用‘+’表示，其他地方用‘-’表示。```

## `Input`

`每个输入包含多个测试用例，每个测试用例一行为两个整数 a，b(0<=a,b<256)为小明所选定的两个数。`

## `Output`

`对于每个测试用例，输出一个8*8的矩阵，按要求表明炸弹位置。`

## `Sample Input`

``````9 18
``````

## `Sample Output`

``````--------
--------
--------
----+--+
--------
--------
----+--+
--------
``````

## `Source`

`icpc7th@ahstu`

``````    #include
#include
#include
#include
using namespace std;
string X,Y;
int x,y;
void init()
{
while(x!=0)
{
X+=((x%2)+'0');
x/=2;
}
while(y!=0)
{
Y+=((y%2)+'0');
y/=2;
}
reverse(X.begin(),X.end());
reverse(Y.begin(),Y.end());
int l1=X.size();
int l2=Y.size();
for(int i=0;i<8-l1;i++)
X.insert(X.begin(),'0');
for(int i=0;i<8-l2;i++)
Y.insert(Y.begin(),'0');
}
void bomb()
{
for(int i=0;i>x>>y)
{
init();
bomb();
X="";
Y="";
}
return 0;
}``````

# `化学老师的惩罚`

```Time Limit:1000MS Memory Limit:65536K Total Submit:0 Accepted:0```

## `Description`

```小明的化学成绩很差，他的老师对他恨铁不成钢啊，于是想了一个法子——把他关在了一个密室里，出不来不给吃饭。这个把小明急坏了。。 小明发现密室的墙上写了许多化学方程式中。化学方程式，也称为化学反应方程式，是用化学式表示物质化学反应的式子。化学方程式反映的是客观事实。因此书写化学方程式要遵守两个原则：一是必须以客观事实为基础；二是要遵守质量守恒定律。 化学方程式不仅表明了反应物、生成物和反应条件。同时，化学计量数代表了各反应物、生成物物质的量关系，通过相对分子质量或相对原子质量还可以表示各物质之间的质量关系，即各物质之间的质量比。对于气体反应物、生成物，还可以直接通过化学计量数得出体积比。例如：2NaOH+H2SO4=Na2SO4+2H2O 经过多次试探、推理，小明发现密码是4位数字，就隐藏在化学方程式等号后的第一个分子中，其分子量就可能是密码（若分子量不足4位，前面加0）。 ```

`好在小明还记得墙上各化学方程式用到的化学元素的原子量如下： `

`N | C | O | Cl | S | H | Al | Ca | Zn | Na | B | Ni `

`14 | 12 | 16 | 35 | 32 | 2 | 27 | 40 | 65 | 23 | 11 | 59 `

`你能帮小明尽快找到密码吗？`

## `Input`

```输入包含多组测试用例。 每个测试用例 第一行： K，表示有K个化学方程式； 接下来有K行，每行为一个化学方程式```

## `Output`

`对于每个化学方程式输出一行：即密码。`

## `Sample Input`

``````2
2C+O2=2CO
Ca2CO3+H2O=Ca2(OH)2+CO2
``````

## `Sample Output`

``````0056
0116
``````

## `Source`

`icpc7th@ahstu`

``````    #include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
mapmp;
vectorsp;
vectorsp_num;
string total;
void init()
{
mp["Na"]=23;mp["Zn"]=65;
mp["Ca"]=40;mp["Al"]=27;
mp["H"]=2;  mp["S"]=32;
mp["Cl"]=35;mp["O"]=16;
mp["C"]=12; mp["N"]=14;
mp["B"]=11; mp["Ni"]=59;
}
int calculate(string B)
{
int sum=0;
for(int i=0; i>N)
{
while(N--)
{
string A;
cin>>A;
Find(A);
printf("%04d\n",T_calculate());
sp.clear();
sp_num.clear();
total="";
}
}
return 0;
}
``````

# `水题！`

```Time Limit:1000MS Memory Limit:65536K Total Submit:116 Accepted:44```

## `Description`

`杯子高H，水高h，杯顶半径R，杯底半径r，求水的体积。（Pi=3.1415926) `

## `Input`

`H R r h `

`水的体积`

## `Sample Input`

``````10 8 7 4
``````

## `Sample Output`

``````855.56
``````

## `Hint`

``````圆台计算公式V=1/3*Pi*h*(R^2+r^2+R*r)
``````

## `Source`

`icpcth7@ahstu`