T1圣诞树
没啥好说的,暴力枚举每一层的绳子数量即可。
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <cctype>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
ull n,cnt=0;
cin>>n;
for(int i=1;i<=n-1;i++)cnt+=2*i;
cnt+=(n-1);
cout<<cnt<<endl;
return 0;
}
T2 最大公约数
f1:暴力YYDS!
从三个数中选个最小的,直接一路干到1。在这期间如果找到一个数$i$能被三个数同时整除,输出$i$,$b$$r$$e$$a$$k$即可。
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <cctype>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int a,b,c;
cin>>a>>b>>c;
for(int i=min(a,min(b,c));i>=1;i--)
if(a%i==0&&b%i==0&&c%i==0)
{
cout<<i<<endl;
return 0;
}
return 0;
}
f2:欧几里得算法(辗转相除法)
不解释,请上网自查。(懒)
T3 双十一
裸的日期问题。定义一个数组$a$,如果$a_x$$=$$1$,表示$x$年的双十一在周末。否则直接PASS。同时也要做越界处理,比如$2$$0$$2$$1$年$1$$3$月?!$1$$9$$9$$9$年$1$月$32$日?!这些日期都是不合法的,要做特殊处理。
注意:2月也要特殊对待,因为2月有时候28天,有时候29天。
这些预处理做完后,输入StartYear,EndYear。然后区间内查找$a_i$是否等于$1$即可。
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <cctype>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int cnt,a[3001],year=1900,month=1,day=1,xq=1,b[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
while(year<=3000)
{
if((year%4==0&&year%100!=0)||year%400==0)b[2]=29;
else b[2]=28;
if(month==11&&day==11)
{
if(xq==6||xq==0)a[year]=1;
else a[year]=0;
}
day++;
if(day>b[month])
{
month++;
day=1;
}
if(month>12)
{
year++;
month=1;
day=1;
}
xq=(xq+1)%7;
}
int st,en;
cin>>st>>en;
for(int i=st;i<=en;i++)
if(a[i])
cnt++;
cout<<cnt<<endl;
return 0;
}
T4 素数方阵
想AC这题可以看看简化版:蛇形方阵 AC简化版后,只需要加入亿些变量即可。
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <cctype>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int n,a[21][21],k=2,x=1,y=0,sex,sey,f=1;
//f表示已经填过的格子数
int isprime(int x)
{
for(int i=2;i<x;i++)
if(x%i==0)
return false;
return true;
}
int next(int x)//从x开始,寻找下一个质数
{
x++;
while(!isprime(x))x++;
return x;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>sex>>sey;
while(f<=n*n)//填数
{
while(y<n&&!a[x][y+1])a[x][++y]=k,k=next(k),f++;
while(x<n&&!a[x+1][y])a[++x][y]=k,k=next(k),f++;
while(y>1&&!a[x][y-1])a[x][--y]=k,k=next(k),f++;
while(x>1&&!a[x-1][y])a[--x][y]=k,k=next(k),f++;
}
cout<<a[sex][sey]<<endl;//输出
return 0;
}
T5 整数乘方
高精乘法预警!
#include <bits/stdc++.h>
using namespace std;
int c[10001],a,n,len=1,A,B,pos;
void mul(int *c,int x)//高精乘法函数
{
int jw=0;//将进位赋值为0
for(int i=1;i<=10000;i++)//模拟乘法,人怎么算它就怎么算
{
c[i]=c[i]*x+jw;
jw=c[i]/10;
c[i]%=10;
}
}
int main()
{
cin>>a>>n;
c[1]=1;//一定要复值为1!!!
for(int i=1;i<=n;i++)mul(c,a);
for(int i=10000;i>=1;i--)//干掉前缀0
if(c[i]!=0)
{
pos=i;
break;
}
for(int i=pos;i>=1;i--)
if(c[i]%2==0)B++;
else A++;
cout<<A-B<<endl;
return 0;
}
T6 棋盘游戏
这道题HelloWorldRoom好像没有哎。
这道题可以用曼哈顿距离去做,就变得很简单了。
没有代码!