您的位置:首页 > 大数据 > 人工智能

2016 Al-Baath University Training Camp Contest-1(gym101028)

2016-07-12 20:41 417 查看
A
Codeforces Rating

题意:给定n和m,以及n个数,问这n个数之和加上1500是否等于m。

/*************************************************************************
File Name: A.cpp
ID: obsoles1
PROG:
LANG: C++
Mail: 384099319@qq.com
Created Time: 2016年07月12日 星期二 12时57分18秒
************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cctype>
#include<ctime>
#include<cstdlib>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;

int main(){
int t,n,m,sum,i,x;
while(~scanf("%d",&t)){
while(t--){
sum=1500;
scanf("%d%d",&n,&m);
for(i=0;i<n;++i){
scanf("%d",&x);
sum+=x;
}
if(sum==m)puts("Correct");
else puts("Bug");
}
}
}


B
Bonapity

题意:p等同于b,i等同于e,且不分大小写,给定a,b两个字符串,问它们是否相等。

/*************************************************************************
File Name: B.cpp
ID: obsoles1
PROG:
LANG: C++
Mail: 384099319@qq.com
Created Time: 2016年07月12日 星期二 12时57分28秒
************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cctype>
#include<ctime>
#include<cstdlib>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;
const int N=110;
char a
,b
;

int main(){
int t,len1,len2,i;
while(~scanf("%d",&t)){
while(t--){
scanf("%s%s",a,b);
len1=strlen(a);
len2=strlen(b);
if(len1==len2){
bool flag=0;
for(i=0;i<len1;++i){
a[i]=tolower(a[i]);
b[i]=tolower(b[i]);
if(a[i]==b[i] || (a[i]=='p' && b[i]=='b') || (a[i]=='b' && b[i]=='p') || (a[i]=='i' && b[i]=='e') || (a[i]=='e' && b[i]=='i'))continue;
else flag=1;
}
if(flag)puts("No");
else puts("Yes");
}else puts("No");
}
}
}


C
A or B Equals C

题意:A|C==B,给定A,B的二进制,问C有多少种可能,答案mod1e9+7。

/*************************************************************************
File Name: C.cpp
ID: obsoles1
PROG:
LANG: C++
Mail: 384099319@qq.com
Created Time: 2016年07月12日 星期二 12时57分48秒
************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cctype>
#include<ctime>
#include<cstdlib>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;
const int N=110,mod=1e9+7;
char a
,b
;

int main(){
int t,n,i;
while(~scanf("%d",&t)){
while(t--){
scanf("%d%s%s",&n,a,b);
//cout<<a<<endl<<b<<endl;
ll ans=1;
for(i=0;i<n && ans;++i){
if(a[i]=='1'){
if(b[i]=='1')ans=(ans*2)%mod;
else ans=0;
}
}
if(ans)printf("%I64d\n",ans);
else puts("IMPOSSIBLE");
}
}
}


D
X and paintings

题意:给定n×m的方格,q条命令(q<=100),x1 y1 x2 y2 c,从左上角x1,y1到右下角x2,y2涂成c,不曾涂色的输出'.'。

思路:暴力

/*************************************************************************
File Name: D.cpp
ID: obsoles1
PROG:
LANG: C++
Mail: 384099319@qq.com
Created Time: 2016年07月12日 星期二 12时58分04秒
************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cctype>
#include<ctime>
#include<cstdlib>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;
const int N=110;
char mp

;

int main(){
int t,n,m,q,i,j,x1,y1,x2,y2;
char c[2];
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d%d",&n,&m,&q);
Mem0(mp);
while(q--){
scanf("%d%d%d%d%s",&x1,&y1,&x2,&y2,c);
for(i=x1;i<=x2;++i)
for(j=y1;j<=y2;++j)
mp[i][j]=c[0];
}
for(i=1;i<=n;++i){
for(j=1;j<=m;++j)
if(mp[i][j])printf("%c",mp[i][j]);
else printf(".");
puts("");
}
}
}
}


E
Teams

题意:n所大学分别有ai个人参赛,要求统一队伍人数,且相同学校才能组队,希望队伍数最小且每人都必须参赛,问每队人数和队伍数。

思路:求n个数的gcd

/*************************************************************************
File Name: E.cpp
ID: obsoles1
PROG:
LANG: C++
Mail: 384099319@qq.com
Created Time: 2016年07月12日 星期二 12时58分21秒
************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cctype>
#include<ctime>
#include<cstdlib>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;

int main(){
int t,n,i,a,b;
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d",&n,&a);
int sum=a;
for(i=1;i<n;++i){
scanf("%d",&b);
a=__gcd(a,b);
sum+=b;
}
printf("%d %d\n",a,sum/a);
}
}
}


F
Good Words

题意:给定a,b两个字符串,b的length==4。当b为a的字串,a被认为是good;当a插入一个字符能成为good,a被认为是almost good;否则为none。问a是什么。

思路:用string的find函数判断一下即可

/*************************************************************************
File Name: F.cpp
ID: obsoles1
PROG:
LANG: C++
Mail: 384099319@qq.com
Created Time: 2016年07月12日 星期二 14时06分46秒
************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cctype>
#include<ctime>
#include<cstdlib>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;

int main(){
ios::sync_with_stdio(0);
int t,i,j;
string a,b,c;
while(cin>>t){
while(t--){
cin>>a>>b;
//i=a.find(b,0);cout<<"i="<<i<<endl;
if(a.find(b,0)!=-1)cout<<"good\n";
else{
bool flag=0;
for(i=0;i<4 && !flag;++i){
c="";
for(j=0;j<4;++j){
if(i==j)continue;
c+=b[j];
}
//cout<<"c="<<c<<endl;
if(a.find(c,0)!=-1)flag=1;
}
if(flag)cout<<"almost good\n";
else cout<<"none\n";
}
}
}
}


G
The Tower of Evil

题意:看题目note里的图就能明白了

思路:分析一下图,特判m=2的情况

/*************************************************************************
File Name: G.cpp
ID: obsoles1
PROG:
LANG: C++
Mail: 384099319@qq.com
Created Time: 2016年07月12日 星期二 14时21分10秒
************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cctype>
#include<ctime>
#include<cstdlib>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;

int main(){
int t,n,m,p,a,b;
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d%d",&n,&m,&p);
if(n>m){
n-=m;
a=(n+m-2)/(m-1)+1;
b=n%(m-1);
}else a=1,b=n-1;
if(m==2 && a!=1)a++;
if(a%2){
if(b+1==p)puts("Yes");
else puts("No");
}else{
if(m-b==p)puts("Yes");
else puts("No");
}
}
}
}


H
The Endless River

题意:环形河有n米,D移动d米每分,R移动r米每分,每分末D和R都会做一个标记,问最早在第几分钟D和R的标记重合。

思路:暴力

/*************************************************************************
File Name: H.cpp
ID: obsoles1
PROG:
LANG: C++
Mail: 384099319@qq.com
Created Time: 2016年07月12日 星期二 14时59分01秒
************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cctype>
#include<ctime>
#include<cstdlib>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;
const int N=1e5+10;
bool fd
,fr
;

int main(){
int t,n,d,r,i,ans,pd,pr;
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d%d",&n,&d,&r);
Mem0(fd),Mem0(fr);
ans=1;
pd=d%n,pr=r%n;
fd[pd]=1,fr[pr]=1;
while(!fd[pr] && !fr[pd]){
pd=(pd+d)%n,pr=(pr+r)%n;
fd[pd]=1,fr[pr]=1;
ans++;
}
printf("%d\n",ans);
}
}
}


I
March Rain

题意:在一条带子上遮洞,带子上有n个洞,可以买k条布,问要遮住所有洞,布的长度最少为多少

思路:二分

/*************************************************************************
File Name: I.cpp
ID: obsoles1
PROG:
LANG: C++
Mail: 384099319@qq.com
Created Time: 2016年07月12日 星期二 16时01分50秒
************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cctype>
#include<ctime>
#include<cstdlib>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;
const int N=1e5+10;
int a
;

int main(){
int t,n,k,i,ans;
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d",&n,&k);
for(i=0;i<n;++i)scanf("%d",a+i);
int low=1,high=(a[n-1]+k-1)/k,mid;
//cout<<"low="<<low<<" high="<<high<<endl;
while(low<=high){
mid=(low+high)>>1;
//cout<<"mid="<<mid<<endl;
int cnt=1,pos=a[0];
for(i=1;i<n;++i)
if(a[i]-pos+1>mid)pos=a[i],cnt++;
//cout<<"cnt="<<cnt<<endl;
if(cnt>k)low=mid+1;
else high=mid-1,ans=mid;
//cout<<"low="<<low<<" high="<<high<<endl;
}
printf("%d\n",ans);
}
}
}


J
X and Beasts

题意:路上有n家武器升级商店,每家分别能买ai点能量用来升级。能升几级取决于ai能被2的几次方整除,如6能被2整除,so能升1级,8能被8整除能升3级。且所买的能量必须严格递增,问武器最多能有几级

思路:DP,dp[i]代表1到i武器的最高级数,b[i]代表商店i的能量能升的级数。状态转移方程:dp[i]=max(dp[i],dp[j]+b[i]);

/*************************************************************************
File Name: J.cpp
ID: obsoles1
PROG:
LANG: C++
Mail: 384099319@qq.com
Created Time: 2016年07月12日 星期二 15时18分58秒
************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cctype>
#include<ctime>
#include<cstdlib>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;
const int N=110;
int a
,b
,dp
;

int main(){
int t,n,i,j,x;
while(~scanf("%d",&t)){
while(t--){
scanf("%d",&n);
for(i=0;i<n;++i){
scanf("%d",a+i);
b[i]=0;
x=a[i];
while(x%2==0)x>>=1,b[i]++;
//cout<<"b["<<i<<"]="<<b[i]<<endl;
dp[i]=b[i];
}
for(i=1;i<n;++i)
for(j=0;j<i;++j)
if(a[i]>a[j])
dp[i]=Max(dp[i],dp[j]+b[i]);
int ans=0;
for(i=0;i<n;++i)
ans=Max(ans,dp[i]);
printf("%d\n",ans);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: