目录
F - Reports
题意:检查报告是否正确,当且仅当不存在两个连续且相同的报告时,一个报告序列才是正确的。
思路:签到题
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,n,x;
cin>>t;
while(t--)
{
cin>>n;
cin>>x;
int p=x;
int f=1;
for(int i=2;i<=n;i++)
{
cin>>x;
if(x==p)
{
f=0;
}
else
{
p=x;
}
}
if(f==0)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
}
B - Express Mail Taking
题意:有n个橱柜,编号是1到n。相邻橱柜间的距离为1,1号柜是入口,k号柜用于输入密码。Baby Volcano有m个快递要拿,快递i在柜子ai里。两个快递不会存放在同一个柜子里,k号柜没有快递。为了防止快递被盗,Baby Volcano从入口处开始,如果要取快递i,他必须先走到k号柜输入密码,求取完需要的最小步数。
思路:
样例1解释:
样例2解释:
首先要从入口到k号柜,然后拿完快递回到入口。ans=2*(k-1),对于每个快递都要走2*abs(ai-k),(走到ai,从ai回到k,所以是2倍的abs(ai-k)),如果最小的ai在k号柜的左边,最后取它,不需要在回到k为下一次输入密码,所以此时减去(k-最小的ai)。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxx=2e6+10;
int a[maxx];
int main()
{
int t,n,m,k;
scanf("%d",&t);
while(t--)
{
//cin>>n>>m>>k;
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+1+m);
ll ans=(k-1)*2;
//cout<<ans<<" ";
for(int i=1;i<=m;i++)
{
ans+=abs(a[i]-k)*2;
//cout<<ans<<" ";
}
if(a[1]<k)
{
ans-=abs(a[1]-k)*2;
}
printf("%lld\n",ans);
}
}
E - CCPC Training Class
题意:字符串中出现次数最多的字母的次数是多少?
思路:由样例得题意
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxx=2e6+10;
int a[40];
int main()
{
int t,n,m,k,ct;
string s;
cin>>t;
ct=1;
while(t--)
{
cin>>s;
int len=s.size();
memset(a,0,sizeof(a));
for(int i=0;i<len;i++)
{
a[s[i]-'a']++;
}
int ans=0;
for(int i=0;i<28;i++)
{
if(a[i]>ans)
{
ans=a[i];
}
}
cout<<"Case #"<<ct++<<": "<<ans<<endl;
}
}
G - 3x3 Convolution
题意:有一个n x n的矩阵A和一个3 x 3的矩阵K,均为非负矩阵,并且K是一个和为1的分数矩阵。定义一个操作,对于矩阵A,用矩阵K对A中的每个元素进行卷积操作------K的左上角遍历A中每个元素,每一次覆盖对A中3 x 3范围内(范围不够的在A的边缘补上足够多的0)的矩阵在K的作用下作带权求和运算。得到一个新的矩阵C,将矩阵C代替A,继续与K进行3x3卷积。当进行的次数足够大时,求最终矩阵。
思路:
找规律:如果K矩阵除了k[1][1]外都是0,则输出最原始的A矩阵;其他情况输出nxn的全0。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[60][60];
int k[6][6];
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
int f=0;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
cin>>k[i][j];
if(k[i][j]==0)
{
f++;
}
}
}
if(f==8&&k[1][1]!=0)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(j!=n)
cout<<a[i][j]<<" ";
else
cout<<a[i][j];
}
cout<<endl;
}
}
else
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(j!=n)
cout<<"0"<<" ";
else
cout<<"0";
}
cout<<endl;
}
}
}
}