答案:67108864
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
long long int m=256;
m=m*1024*1024/4;
printf("%lld",m);
return 0;
}
答案:3181
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int f[15];
int main()
{
for(int i=0;i<10;i++)
f[i]=2021;
int x=0,flag=1;
while(1)
{
int k=x+1;
while(k)
{
int s=k%10;
if(f[s])
{
f[s]--;
k/=10;
}
else
{
flag=0;
break;
}
}
if(flag)
x++;
else
break;
}
printf("%d",x);
return 0;
}
*注:当斜率不存在时,即直线平行于y轴,特殊处理,这里斜率用无穷大表示,截距取x坐标。
答案:48953
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define inf 0x3f3f3f3f
int main()
{
double i,j,k,o;
set<pair<double,double> > s;
for(i=0;i<20;i++)
{
for(j=0;j<21;j++)
{
for(k=0;k<20;k++)
{
for(o=0;o<21;o++)
{
double fz=o-j;
double fm=k-i;
if(fm==0)
s.insert(make_pair(inf,i));
else
{
double x=fz*1.0/fm;
double b=j-x*i;
s.insert(make_pair(x,b));
}
}
}
}
}
printf("%d",s.size());
return 0;
}
如果直接三层for循环,肯定很长时间,所以可以先找到n=2021041820210418的所有因子,然后在暴力找。
答案:2430
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
long long int a[1000000];
int main()
{
long long int n=2021041820210418,i,j,k,l=0;
set<pair<long long int,long long int> > s;
for(i=1;i<=sqrt(n);i++)
if(n%i==0)
a[l++]=i;
k=l;
for(i=0;i<k;i++)
a[l++]=n/a[i];
for(i=0;i<l;i++)
{
for(j=0;j<l;j++)
{
for(k=0;k<l;k++)
{
if(a[i]*a[j]*a[k]==n)
{
s.insert(make_pair(a[i],a[j]));
}
}
}
}
printf("%lld",s.size());
return 0;
}
先创造距离,然后最短路算法,结果…听人家的感觉自己错了┭┮﹏┭┮…(希望路过的大佬可以指正)
答案:804804086
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int n,dis[2050][2050],flag[2050],d[2050];
void djiesitela(int v)
{
long long int sum=0;
for(int i=1;i<=n;i++)
{
d[i]=dis[v][i];
}
flag[v]=1;
for(int i=1;i<n;i++)
{
int pos,minn=INT_MAX;
for(int j=1;j<=n;j++)
{
if(minn>d[j]&&!flag[j])
{
pos=j;
minn=d[j];
}
}
flag[pos]=1;
sum+=minn;
for(int j=1;j<=n;j++)
{
if(dis[pos][j]<d[j]&&!flag[j])
d[j]=dis[pos][j];
}
}
printf("%lld",sum);
}
int main()
{
int i,j;
n=2021;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j)
dis[i][j]=0;
else
dis[i][j]=INT_MAX;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j)
continue;
if(abs(i-j)<=21)
{
dis[i][j]=dis[j][i]=i*j/__gcd(i,j);
}
}
}
djiesitela(1);
return 0;
}
其实年月日对时间显示一点影响都没有,只需要知道1s=1000ms,然后把毫秒转化成秒,最后通过取余确定时分秒。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int y,m,d,h,f,mi;
int main()
{
long long int n;
scanf("%lld",&n);
y=1970,m=1,d=1,h=0,f=0,mi=0;
n/=1000;
int S,F,M;
mi=n%60;
n-=mi;
n/=60;
f=n%60;
n/=60;
h=n%24;
printf("%02d:%02d:%02d",h,f,mi);
return 0;
}
通过队列加入来算,要注意的是砝码可以进行加减,加减后的重量相当于新的砝码加入队列。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int flag[100010];
int main()
{
int n,w[150],i,j,x,sum=0;
scanf("%d",&n);
queue<pair<int,int> > q;
for(i=0;i<n;i++)
{
scanf("%d",&w[i]);
q.push(make_pair(w[i],i));
}
while(!q.empty())
{
int z=q.front().first;
int ii=q.front().second;
if(!flag[z])
{
flag[z]=1;
sum++;
}
q.pop();
for(int i=ii+1;i<n;i++)
{
x=abs(w[i]-z);
if(!flag[x])
{
sum++;
flag[x]=1;
}
q.push(make_pair(x,i));
}
for(int i=ii+1;i<n;i++)
{
x=z+w[i];
if(!flag[x])
{
sum++;
flag[x]=1;
}
q.push(make_pair(x,i));
}
}
printf("%d",sum);
return 0;
}
说实话是真的狗,我推不出来规律,看到10^9数量级,我就知道,前20%吧,唯有暴力!!!o( ̄︶ ̄)o
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int a[10000][10000];
int main()
{
int n,i,j,s,flag=1;
scanf("%d",&n);
if(n==1)
printf("1");
else
{
a[0][0]=1;
a[1][0]=1;
a[1][1]=1;
s=3;
for(i=2;;i++)
{
for(j=0;j<=i;j++)
{
if(j==0||j==i)
{
a[i][j]=1;
s++;
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
s++;
if(a[i][j]==n)
{
printf("%d",s);
flag=0;
break;
}
}
}
if(!flag)
break;
}
}
return 0;
}
前边心态已经搞炸了,时间也不够了,就直接用最直接的方法吧,sort排序呗!!w(゚Д゚)w 后边的过多少自求多福。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int s[100005],n,m,a,b,i;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
s[i]=i+1;
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
if(a==0)
sort(s,s+b,cmp);
else
sort(s+b-1,s+n);
}
for(i=0;i<n;i++)
{
printf("%d",s[i]);
if(i!=n-1)
printf(" ");
}
return 0;
}
写完代码后自己的样例把自己推翻了(⊙o⊙)…也是真的绝了!!