注意:需要提交的是一个整数,不要填写任何多余内容。
【答案】:125
【答案】:387420489
【分析】:二进制模拟,显示的汉字为“九的九次方等于多少?”
【代码】
#include
using namespace std;
typedef long long ll;
void print(int x)
{
for(int i=7;i>=0;i--)
{
if(x&(1<
注意:需要提交的是一个整数,表示末尾零的个数。不要填写任何多余内容。
【答案】:31
【分析】末尾为0只能2*5=10。将乘积质因子分解,2的幂和5的幂 取小的。
【代码】
#include
using namespace std;
int main()
{
int res2=0,res5=0;
for(int i=0;i<100;i++)
{
int x;scanf("%d",&x);
int y=x;
while(x%5==0)res5++,x/=5;
while(x%2==0)res2++,x/=2;
}
cout<
如果到了塔的最高层第n层扔没摔坏,则耐摔指数=n
为了减少测试次数,从每个厂家抽样3部手机参加测试。注意:需要填写的是一个整数,不要填写任何多余内容。
【答案】19
#include
int quick_select(int a[], int l, int r, int k) {
int p = rand() % (r - l + 1) + l;
int x = a[p];
{int t = a[p]; a[p] = a[r]; a[r] = t;}
int i = l, j = r;
while(i < j) {
while(i < j && a[i] < x) i++;
if(i < j) {
a[j] = a[i];
j--;
}
while(i < j && a[j] > x) j--;
if(i < j) {
a[i] = a[j];
i++;
}
}
a[i] = x;
p = i;
if(i - l + 1 == k) return a[i];
if(i - l + 1 < k) return quick_select( _____________________________ ); //填空
else return quick_select(a, l, i - 1, k);
}
int main()
{
int a[] = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12};
printf("%d\n", quick_select(a, 0, 14, 5));
return 0;
}
注意:只填写划线部分缺少的代码,不要抄写已经存在的代码或符号。
【答案】: a, i+1, r, k-i+l-1
【分析】 分别排序
先看b和c两个数组,设两个下标i,j分别指向bc数组,对于每一个b[i],可以找到对应的c[j]恰好大于b[i],那么对于b[i]有n-j个c[j]满足b[i]
然后再看a和b数组,用同样的方法打出数组suma,不过suma[i]=sumb[j];
然后将suma处理成后缀和,suma[0]即为答案。
【代码】
#include
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll suma[N],sumb[N];
int a[N],b[N],c[N];
int n;
int main()
{
scanf("%d",&n);
for(int i=0;i=c[j])j++;
if(j>=n)break;
sumb[i]=n-j;
}
for(int i=n-2;i>=0;i--) //b hou zhui he
sumb[i]+=sumb[i+1];
for(int i=0,j=0;i=b[j])j++;
if(j>=n)break;
suma[i]=sumb[j];
}
for(int i=n-2;i>=0;i--) //a hou zhui he
suma[i]+=suma[i+1];
printf("%lld\n",suma[0]);
}
如图p1.png所示的螺旋折线经过平面上所有整点恰好一次。
对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。
例如dis(0, 1)=3, dis(-2, -1)=9【分析】
有一种简单的方法,算一下当前点在第几圈,每一圈的个数等于内圈加8,等差数列前缀和一算即可。
赛场上我的解法麻烦了,先判断了当前点在那个方向,再分别累加四个方向的线段长度和。
【】
#include
using namespace std;
typedef long long ll;
ll sum1(ll x)
{
return (x+1)*(x+1);
}
ll sum2(ll x){
return sum1(x)-x-1;
}
int main()
{
ll x,y,ans=0;
while(cin>>x>>y){
if(x==-1&&y==0){
ans=1;
}
else if (x==0&&y==0){
ans=0;
}
else if(x+1
【分析】按时间排序,i,j两个下标往右扫描,保证i和j的时间差在D之内,每走一步记下赞超过k的id即可
【代码】
#include
using namespace std;
typedef long long ll;
const int N=1e6+10;
struct node{
int t,id;
}e[N];
bool cmp(node a,node b){
return a.t=d)
c[e[j++].id]--;
c[e[i].id]++;
if(c[e[i].id]>=k&&!insta[e[i].id]){
sta[top++]=e[i].id;
insta[e[i].id]=1;
}
}
sort(sta,sta+top);
top=unique(sta,sta+top)-sta;
for(int i=0;i
【分析】dfs跑连通块,同时记录连通块数量,每个连通块检查下是否存在四面都不是海的#。相减即为完全淹没数量
【代码】
#include
using namespace std;
const int N=1e3+10;
int dir[4][2]={-1,0,0,1,1,0,0,-1};
bool vis[N][N];
char mmp[N][N];
int n,flag;
bool check(int x,int y) //check if sea;
{
for(int i=0;i<4;i++){
int fx=x+dir[i][0];
int fy=y+dir[i][1];
if(fx&&fy&&fx<=n&&fy<=n&&mmp[fx][fy]=='.')
return 1; //sea;
}
return 0; //no sea;
}
void dfs(int x,int y)
{
vis[x][y]=1;
if(!check(x,y))flag=1; //remain lu di
for(int i=0;i<4;i++){
int fx=x+dir[i][0];
int fy=y+dir[i][1];
if(fx&&fy&&fx<=n&&fy<=n&&!vis[fx][fy]&&mmp[fx][fy]=='#')
{
dfs(fx,fy);
}
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",mmp[i]+1);
}
memset(vis,0,sizeof(vis));
int ans=0,ludi=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(!vis[i][j]&&mmp[i][j]=='#')
{
ludi++;
flag=0; //yan mo
dfs(i,j);
if(flag) ans++; //remained
}
}
printf("%d",ludi-ans);
}
【分析】像贪模拟贪心。
分了三种情况,1.不含负数,2.不含正数,3.正负都有。 0的情况可以同时放在这三种情况中。
情况1:从最大数开始选即可
情况2:先考虑能否为0,再考虑选偶数个最小负数,若都做不到,就选奇数个最大负数
情况3:最难。先考虑用尽量少的负数,尽可能用正数,再从最小负数开始考虑,每次拿两个,乘积去和最小整数的进行比较,若大于,则可用这两个负数替换那两个正数
【代码】
#include
using namespace std;
typedef long long ll;
const int mod=1e9+9;
const int N=1e5+10;
bool cmp(int i,int j){
return i>j;
}
ll a[N],b[N];
int ta,tb,n,k;
int main()
{
scanf("%d%d",&n,&k);
ta=tb=0;
int x;
int c0=0;
for(int i=0;i0)a[ta++]=x;
else if(x<0)b[tb++]=x;
else c0++;
}
sort(a,a+ta,cmp);
sort(b,b+tb);
ll ans=1;
if(tb==0) //positive and 0
{
if(ta=2&&k-i>=0)
{
cout<<"i "<a[k-i]*a[k-i+1])
t=i;
else break;
}
for(int i=0;i