今天个人赛用的题是CF1560系列,这次打得还行,得了个第二,但是本来是第一的,后一个小时钻错题了,钻了个难的题,没钻出来,最后让钻简单题的老廖给反超了,gg……
#include <stdio.h>
int cnt=1,number[1005];
int main()
{
for(int i=1;cnt<=1000;i++)
if(i%3!=0&&i%10!=3)
number[cnt++]=i;
int _;
scanf("%d",&_);
while(_--)
{
int n;
scanf("%d",&n);
printf("%d\n",number[n]);
}
return 0;
}
水题,不多说了。
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int _;
scanf("%d",&_);
while(_--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int Max=max(a,b);
int Min=min(a,b);
int n=Max-Min;
if(n==1||Max>2*n||c>2*n)
printf("-1\n");
else
{
if(c>n)
printf("%d\n",c-n);
else
printf("%d\n",c+n);
}
}
return 0;
}
水题,不多说了。
#include <stdio.h>
#include <math.h>
int main()
{
int _;
scanf("%d",&_);
while(_--)
{
int n;
scanf("%d",&n);
int m=sqrt(n);
n-=m*m;
if(!n)
printf("%d %d\n",m,1);
else
{
if(n<=m+1)
printf("%d %d\n",n,m+1);
else
printf("%d %d\n",m+1,2*m+1-n+1);
}
}
return 0;
}
水题,不多说了。
#include <bits/stdc++.h>
using namespace std;
#define INF 0x7fffffff
typedef unsigned long long ull;
ull power[64];
int main()
{
power[0]=1;
for(int i=1;i<=63;i++)
power[i]=2*power[i-1];
int _;
scanf("%d",&_);
while(_--)
{
ull n;
scanf("%lld",&n);
int ans=INF;
for(int i=0;i<=63;i++)
{
string s1=to_string(n);
string s2=to_string(power[i]);
int cnt=0;
for(int j=0,k=0;j<s1.size()&&k<s2.size();j++)
{
if(s1[j]==s2[k])
{
k++;
cnt++;
}
}
cnt=s1.size()+s2.size()-2*cnt;
ans=min(ans,cnt);
}
printf("%d\n",ans);
}
return 0;
}
这题,给你一个数,可以在任意位置删除或添加一个数字,求将这个数变成2的整次幂的最少操作次数。我的处理思路是先打表,将2的整次幂先在一个数组中存好,每读入一个数就跑64次循环,枚举这个数与2的0到63次方的编辑距离。在求编辑距离时,将原数与当前的2的幂次方都转化成字符型处理,这样一来,问题就变成了两个字符串求最小编辑距离了。跑完这64次循环之后答案也就出来了,答案就是这64次循环中编辑距离最小的那一个。