Logo Enderman的博客

博客

2018信息与未来解题报告

2022-05-22 07:22:26 By Enderman

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好像没有哎。

这道题可以用曼哈顿距离去做,就变得很简单了。

没有代码!

评论

Enderman
哪里不懂可以来私信我,或者打在评论区。
xushuoxin
@Enderman 禁止泄露AC代码!!!
xushuoxin
@Enderman 那些没用的头文件可以删掉
xushuoxin
T2 最大公约数: #include<bits/stdc++.h> using namespace std; int main(){ int a,b,c; cin>>a>>b>>c; cout<<__gcd(a,__gcd(b,c)); } 库函数才是YYDS!!!
Will.Pam
@Enderman什么叫曼哈顿距离?
xushuoxin
@Enderman #4641. 「一本通 1.4 练习 1」棋盘游戏 是这个吗

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。