A. System Administrator
题解:比大小,大的输出LIVE小的输出DEAD
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int t,a,b,n;
int inp1[2],inp2[2];
cin>>n;
memset(inp1,0,sizeof(inp1));
memset(inp2,0,sizeof(inp2));
for(int i=0;i<n;i++)
{
cin>>t>>a>>b;
if(t==1) {inp1[0]+=a;inp1[1]+=b;}
if(t==2) {inp2[0]+=a;inp2[1]+=b;}
}
if(inp1[0]>=inp1[1]) cout<<"LIVE"<<endl;
else cout<<"DEAD"<<endl;
if(inp2[0]>=inp2[1]) cout<<"LIVE"<<endl;
else cout<<"DEAD"<<endl;
return 0;
}
B. Internet Address
题意:给出一个字符串,按格式输出
题解:注意如果最后两个字符是ru则结尾无需输出“/”
错误输出:http://.ru/ruw
正确输出:http://ru.ru/w
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[60];
int i,j,l;
cin>>str; l=strlen(str);
if(str[0]=='h'&&str[1]=='t'&&str[2]=='t'&&str[3]=='p')
{cout<<"http://";i=4;}
if(str[0]=='f'&&str[1]=='t'&&str[2]=='p')
{cout<<"ftp://";i=3;}
for(j=i;;j++)
{
if(str[j]=='r'&&str[1+j]=='u'&&j!=i)
{
if(j==l-2) {cout<<".ru";break;}
else {cout<<".ru/";break;}
}
else cout<<str[j];
}
for(j=j+2;j<l;j++)
cout<<str[j];
cout<<endl;
return 0;
}
C. Game with Coins
题意:输入一个数n,代表n个盒子,下一行输入每个盒子装有的硬币数,有个一x,x可以去任意的值,从x,x*2,x*2+1三个盒子中分别取一枚硬币,一共能取几次,如果不符合题意则输出-1
题解:贪心,x从最大值开始取,n必为奇数且n大于等于3
#include <iostream>
using namespace std;
int main()
{
int n,i,x,ans;
int data[105];
cin>>n;
for(i=1;i<=n;i++) cin>>data[i];
if(n%2&&n>=3)
{
x=(n-1)/2;
for(i=x,ans=0;i>=1;i--)
{
ans=max(data[i*2],data[i*2+1])+ans;
data[i]-=max(data[i*2],data[i*2+1]);data[i*2]=0;data[i*2+1]=0;
if(data[i]<0) data[i]=0;
}
for(i=1;i<=n;i++)
{
if(data[i]>0) ans+=data[i];
}
cout<<ans<<endl;
}
else
cout<<-1<<endl;
return 0;
}
D. Restoring Table
题意:b[i][j]=a[i]&a[j],给出二维数组b(主对角线上的数为-1),输出一位数组a
题解:数组a的第i个数是数组b的第i列除-1外所有的数取或的值
#include <iostream>
using namespace std;
int main()
{
int a[111][111],b;
int i,j,n;
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
{
b=0;
for(j=1;j<=n;j++)
{
if(a[j][i]!=-1) b=b|a[j][i];
}
cout<<b<<" ";
}
cout<<endl;
return 0;
}
E. Mishap in Club
题意:“+”一个人上车,“-”一个人下车,输出某一时刻车上最多的人数
题解:最大最小值做差即为结果
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
char str[305];
int dp,i,ans1,ans2;
dp=0;
cin>>str;
int l=strlen(str);
for(i=0,ans1=0,ans2=0;i<l;i++)
{
if(str[i]=='+')
{
dp++;
ans1=max(ans1,dp);
ans2=min(ans2,dp);
}
if(str[i]=='-')
{
dp--;
ans1=max(ans1,dp);
ans2=min(ans2,dp);
}
}
cout<<ans1-ans2<<endl;
return 0;
}