A - Accurately Say "CocaCola"!
题意:过7游戏,但是这次需要求,连续过x个7的时候,第一个数是几.直接暴力打表,马上找到规律
代码:
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<queue>
#define mod 1e9+7
#define inf 0x3f3f3f3f
#define eps 1e-7
#define PI acos(-1.0)
using namespace std;
int G[105][105];
int n,m;
bool is(int k){
int flag=0;
while(k){
if(k%10==7){
flag=1;
break;
}
k/=10;
}
return flag;
}
int main()
{
int n;
while(cin>>n){
while(n--){
int x;
cin>>x;
if(x==1)
cout<<7<<endl;
else if(x==2)
cout<<27<<endl;
else if(x<=10&&x>=3)
cout<<70<<endl;
else if(x==11)
cout<<270<<endl;
else cout<<700<<endl;
}
}
return 0;
}
B - Build The Electric System
题意:prim模板
代码:
#include<iostream>
#include<string.h>
using namespace std;
#define N 1000
#define inf 0x3f3f3f3f
int low[N],vis[N],G[N][N];
int x,y,z,n,m,ans;
int prim()
{
int pos,minnum,result=0;
memset(vis,0,sizeof(vis));
vis[1]=1;
pos=1;
//从第一个定点开始也可从指定定点开始
for(int i=1; i<=n; i++)
{
if(i!=pos)low[i]=G[pos][i];
}
//更新low数组
for(int i=1; i<n; i++)//再运行n-1次
{
minnum=inf;
for(int j=1; j<=n; j++)
{
if(vis[j]==0&&minnum>low[j])
{
minnum=low[j];
pos=j;
}
}
//if(minnum==inf)break;前面在加cnt变量,可以判断是否能成功生成最小生成树
result+=minnum;//找到最小值与下一点
vis[pos]=1;
for(int i=1; i<=n; i++)
{
if(vis[i]==0&&low[i]>G[pos][i])
low[i]=G[pos][i];
}//更新low数组
}
return result;
}
int main()
{
int t;
cin>>t;
while(t--)
{
while(cin>>n>>m)
{
memset(G,inf,sizeof(G));//赋初始值inf
for(int i=1; i<=m; i++)
{
cin>>x>>y>>z;
G[x+1][y+1]=G[y+1][x+1]=z;
}
ans=prim();
cout<<ans<<endl;
}
}
return 0;
}
C - Colorful Rainbows
http://blog.csdn.net/cacyth/article/details/45174107
D - Difference Game
http://blog.csdn.net/cacyth/article/details/45169225
E - Easy Task
题意:算系数
代码
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<queue>
#define mod 1e9+7
#define inf 0x3f3f3f3f
#define eps 1e-7
#define PI acos(-1.0)
using namespace std;
int a[105];
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
for(int i=n;i>=0;i--){
cin>>a[i];
a[i]=a[i]*i;
}
cout<<a[n];
for(int i=n-1;i>=1;i--){
cout<<" "<<a[i];
}
cout<<endl;
}
return 0;
}
F - Faster, Higher, Stronger
题意:根据给出的词找就行了
代码
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<queue>
#define mod 1e9+7
#define inf 0x3f3f3f3f
#define eps 1e-7
#define PI acos(-1.0)
using namespace std;
int main()
{
int t,x;
string s;
cin>>t;
while(t--)
{
cin>>s;
cin>>x;
int maxnum;
if(s=="Faster")
{
maxnum=inf;
for(int i=0; i<x; i++)
{
int y;
cin>>y;
maxnum=min(maxnum,y);
}
}
else
{
maxnum=0;
for(int i=0; i<x; i++)
{
int y;
cin>>y;
maxnum=max(maxnum,y);
}
}
cout<<maxnum<<endl;
}
return 0;
}
G - Give Me the Number
题意:给出英文转化成数字,一道模拟题,重点是细心
代码:
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<queue>
#define mod 1e9+7
#define inf 0x3f3f3f3f
#define eps 1e-7
#define PI acos(-1.0)
using namespace std;
char *str[34]= {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
"twenty", "thirty", "forty", "fifty", "sixty", "seventy","eighty","ninety","million","thousand","hundred","and"
};
int num[31]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,40,50,60,70,80,90,1000000,1000,100};
char s1[100];
char sss[100000];
long long ans,temp;
long long mi,thou,hun;
void deal(int i)
{
//cout<<i<<endl;
if(i==31)
ans+=0;
else if(i==28)
{
temp=temp+thou+hun;
mi=temp*1000000;
temp=0;
thou=0;
hun=0;
}
else if(i==29)
{
temp=temp+hun;
thou=temp*1000;
temp=0;
hun=0;
}
else if(i==30)
{
hun=temp*100;
temp=0;
}
else temp+=num[i];
ans=mi+thou+hun+temp;
//cout<<temp<<" "<<ans<<endl;
//printf("%s\n",str[i]);
}
void compair()
{
for(int i=0; i<40; i++)
{
if(!strcmp(str[i],s1))
{
deal(i);
break;
}
}
}
int main()
{
int t,cnt;
scanf("%d%*c",&t);
while(t--)
{
ans=0,temp=0;
mi=thou=hun=0;
gets(sss);
int len=strlen(sss);
sss[len]=' ';
sss[len+1]='\0';
len++;
for(int i=0; i<100; i++)
s1[i]='\0';
cnt=0;
for(int pos=0; pos<=len; pos++)
{
if(sss[pos]==' ')
{
//printf("%s\n",s1);//注意恢复
compair();
cnt=0;
for(int i=0; i<100; i++)//恢复
s1[i]='\0';
}
else
{
s1[cnt++]=sss[pos];
}
}
cout<<ans<<endl;
}
return 0;
}
H - Hurdles of 110m
题意:给出刘翔跑步的三种策略,让你算怎么跑时间最短,一开始没想到是dp,后来才做出来,发现其实是挺简单的dp
代码:
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<queue>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
#define inf 0x3f3f3f3f
#define eps 1e-7
#define PI acos(-1.0)
using namespace std;
int dp[200][200];
int main()
{
int t,n,m;
cin>>t;
while(t--)
{
cin>>n>>m;
for(int i=0; i<200; i++)
for(int j=0; j<200; j++)
dp[i][j]=inf;
dp[0][m]=0;
for(int i=1; i<=n; i++)
{
int t1,t2,t3,f1,f2;
cin>>t1>>t2>>t3>>f1>>f2;
for(int j=m; j>=0; j--)
{
dp[i][j]=min(dp[i][j],dp[i-1][j]+t2);//保持
if(j>=f1)
dp[i][j-f1]=min(dp[i][j-f1],dp[i-1][j]+t1);//加速
int now=j+f2;
if(now>m)
now=m;
dp[i][now]=min(dp[i][now],dp[i-1][j]+t3);//减速,当前体力
}
}
int mintime=inf;
for(int i=0; i<=m; i++)
{
if(dp[n][i]<mintime)
mintime=dp[n][i];
}
cout<<mintime<<endl;
}
return 0;
}
I - Intelligent Pouring Robot
挖坑待填
J - Just Pour the Water
题意:把水倒来倒去,本质上是一道矩阵快速幂,前面的给的倒水只是为了建立一个矩阵,模板(本人的模板不太好,不是自己整理的,赛场上临时更改,浪费了很多时间)
代码:
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<queue>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
#define inf 0x3f3f3f3f
#define eps 1e-7
#define PI acos(-1.0)
using namespace std;
struct Matrix
{
int n,m;
double maps[205][205];
Matrix(int sn=0,int sm=0,bool isUnit=false)
{
n = sn;
m = sm;
memset(maps,0,sizeof(maps));
if(isUnit)
{
for(int i=1; i<=n; ++i)
maps[i][i] = 1;
}
}
Matrix operator * (const Matrix &b) const
{
Matrix ret(n,b.m,false);
for(int i=1; i<=n; ++i)
{
for(int j=1; j<=b.m; ++j)
{
for(int k=1; k<=m; ++k)
{
ret.maps[i][j] = ret.maps[i][j] + maps[i][k] * b.maps[k][j];
}
}
}
return ret;
}
};
Matrix qpow(Matrix a,int n)
{
Matrix ret(a.n,a.m,true);
while(n)
{
if(n & 1)
ret = ret * a;
a = a * a;
n >>= 1;
}
return ret;
}
int n,m,t,x,y;
double aa[25];
int main()
{
cin>>t;
while(t--)
{
cin>>n;
Matrix a(n,n,true),b(n,n);
for(int i=1; i<=n; i++)
scanf("%lf",&aa[i]);
for(int i=1; i<=n; i++)
{
int x,to;
cin>>x;
for(int j=0; j<x; j++)
{
cin>>to;
a.maps[i][to]+=(1.0)/(1.0*x);
a.maps[i][i]-=(1.0)/(1.0*x);
}
}
/*for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<a.maps[i][j]<<" ";
cout<<endl;
}*/
cin>>m;
b = qpow(a,m);
int flag=0;
for(int i=1; i<=n; ++i)
{
if(flag)printf(" ");
double ans=0;
for(int j=1;j<=n;j++){
ans+=b.maps[j][i]*aa[j];
}
printf("%.2lf",ans);
flag=1;
}
cout<<endl;
}
return 0;
}
K - Kinds of Fuwas
题意:判断这个矩阵里有几个矩形,满足矩形的四个角是同一个字母.先是两重for枚举每种两行(或者两列),然后对每种字母个数位置统计,如果两行中存在两个或者更多列位置相同的字母,那么可以根据组合数算出对应答案,总体相加即可
代码:
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<queue>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
#define inf 0x3f3f3f3f
#define eps 1e-7
#define PI acos(-1.0)
using namespace std;
int n,m,t,ans;
char maps[255][255];
char fuwa[]="BJHYN";
int main()
{
scanf("%d",&t);
while(t--)
{
cin>>n>>m;
for(int i=0; i<n; i++)
scanf("%s",maps[i]);
ans=0;
for(int i=0; i<n; i++)
{
for(int j=i+1; j<n; j++)
{
for(int k=0; k<5; k++)
{
int cnt=0;
for(int l=0;l<m;l++){
if(maps[i][l]==fuwa[k]&&maps[j][l]==fuwa[k])
cnt++;
}
ans+=cnt*(cnt-1)/2;
}
}
}
cout<<ans<<endl;
}
return 0;
}
L - Light Bulbs
题意:公式题,枚举100*100的点就行.一开始被这种英文唬住了,后来补得时候才发现好简单
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
struct node
{
double x,y,z,l;
} a[105];
int n;
double deal(double x,double y)
{
double r,ans=0,cosvalue;
for(int i=0;i<n;i++){
r=sqrt(a[i].z*a[i].z+(a[i].x-x)*(a[i].x-x)+(a[i].y-y)*(a[i].y-y));
cosvalue=a[i].z/r;
ans+=a[i].l*cosvalue/r/r;
}
return ans;
}
int main()
{
int t;
double maxnum;
cin>>t;
while(t--)
{
maxnum=0;
cin>>n;
for(int i=0; i<n; i++)
cin>>a[i].x>>a[i].y>>a[i].z>>a[i].l;
for(int i=-100; i<=100; i++)
{
for(int j=-100; j<=100; j++)
{
double temp=deal(i,j);
maxnum=max(maxnum,temp);
}
}
printf("%.2f\n",maxnum);
}
return 0;
}