NOIP1998普及组解题报告

三连击

分析:模拟大水题。打表也行。注意输出顺序即可。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=10;
bool book[maxn];
int main(){
    for(int i=1;i<=9;++i){
        for(int j=1;j<=9;++j){
            for(int k=1;k<=9;++k){
                if(i!=j&&i!=k&&j!=k){
                    memset(book,0,sizeof(book));
                    book[i]=1;
                    book[j]=1;
                    book[k]=1;
                    int t=i*100+j*10+k;
                    int t1=t*2;
                    int t2=t*3;
                    int s=0;
                    while(t1>0){
                        book[t1%10]=1;
                        t1/=10;
                        ++s;
                    }
                    if(s>3)break;
                    s=0;
                    while(t2>0){
                        book[t2%10]=1;
                        t2/=10;
                        ++s;
                    }
                    if(s>3)break;
                    bool flag=1;
                    for(int i=1;i<=9;++i)if(book[i]==0)flag=0;
                    if(flag){
                        cout<<t<<" "<<t*2<<" "<<t*3<<endl;
                    }
                }
            }
        }
    }
    return 0;
}

阶乘之和

分析:高精度加法+高精度乘法(1个大数),模版体0 0

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1010;
int ans[maxn],len=0,t[maxn],l=0;
void sub(int s){
    for(int i=0;i<=l;++i){
        t[i]*=s;
    }
    for(int i=0;i<=l;++i){
        t[i+1]+=t[i]/10;
        t[i]%=10;
        if(i==l&&t[i+1]!=0)++l;
    }
}
void add(){
    for(int i=0;i<=max(l,len);++i){
        ans[i]+=t[i];
    }
    for(int i=0;i<=max(l,len);++i){
        ans[i+1]+=ans[i]/10;
        ans[i]%=10;
    }
    len=max(l,len);
    if(ans[max(l,len)+1]>0)len++;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;++i){
        memset(t,0,sizeof(t));
        t[0]=1;
        for(int j=1;j<=i;++j){
            sub(j);
        }
        add();
    }
    for(int i=len;i>=0;--i)cout<<ans[i];
    return 0;
}

幂次方

分析:计算机里的数就是二进制的,例如 7 =(B)111,模拟依次先处理最高位,得到的指数再传进参数递归。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
void f(int n){
    int m=n;
    bool flag=0;
    while(n>0){
        int t=0;
        while(n>0){
        n/=2;
        ++t;
        }
        if(t==0)return ;
        if(t==1){
            if(flag)cout<<"+";flag=1;
            cout<<"2(0)";
        }
        else if(t==2){
            if(flag)cout<<"+";flag=1;
            cout<<"2";
        }
        else{
            if(flag)cout<<"+";flag=1;
            cout<<"2(";f(t-1);cout<<")";
        }
        n=m-pow(2,t-1);
        m=n;
    }

}
int main(){
    int n;
    cin>>n;
    f(n);
    return 0;
}

总结:noip1998的题除了第3题,其他就是一点思维难度都没有的题。模版不要打错,细节不要忽略即可。

时间: 2024-08-02 05:12:46

NOIP1998普及组解题报告的相关文章

NOIP1999普及组解题报告

不知怎么地,洛谷的noip1999普及组的题和以前考的不一样 /雾 回文数 分析:一道高精度加法的模拟题,注意还有16进制. #include<iostream> #include<algorithm> #include<cstring> #include<cmath> using namespace std; const int maxn=150; int n,len=0,a[maxn]; char s[maxn]; bool is_h(){ for(in

NOIP2001普及组解题报告

数的计算 分析:递归即可.不用学他造数. #include<iostream> #include<algorithm> using namespace std; int f(int n){ int ret=1; for(int i=1;i<=n/2;++i){ ret+=f(i); } return ret; } int main(){ int n; cin>>n; cout<<f(n); return 0; } 求先序排列 分析:将中序排列分为l到r

NOIP2012普及组解题报告

by RtPYH ------------------------------------------------------------------------------------------------------------------ 前言:作者是一个蒟蒻,如果对本文有建议,欢迎提出!鄙人将虚心接受. --------------------------------------------------------------------------------------------

NOIP2002普及组解题报告

过河卒 分析:简单递推题.注意答案要longlong #include<iostream> #include<algorithm> using namespace std; int dx[10]={0,-1,-1,1,1,2,2,-2,-2},dy[10]={0,2,-2,2,-2,1,-1,1,-1}; bool book[25][25]; long long f[25][25]; int main(){ int n,m,x,y; cin>>n>>m>

NOIP2000普及组解题报告

/雾 noip2000发生了什么?为什么洛谷上就一道题- - 计算器的改良 分析:字符串模拟题.记录分别记录等式两边的系数与常数即可.以前在codevs上做过,也就直接把代码贴上来了. #include<iostream> #include<algorithm> #include<cstdio> #include<iomanip> #include<cmath> using namespace std; int main() { char c,l

第六届蓝桥杯大赛个人赛省赛(软件类)C++A组 解题报告

[第一题] 方程整数解 方程: a^2 + b^2 + c^2 = 1000 (或参见[图1.jpg]) 这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解. 你能算出另一组合适的解吗? 请填写该解中最小的数字. 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. [答案]:暴力算出另一种解为 10 18 24 ,所以最小的数为10 [第二题] 星系炸弹 在X星系的广袤空间中漂浮着许多X星人造"炸弹",用来作为宇宙中的路标. 每个炸弹都可以设定多少天之后爆炸.

NOIP2009提高组解题报告

前些天做了一趟noip2009提高组的题,第一次得分为285,算是达到了那年省一的线,但也充分说明了我还存在很多问题. 第一题: [问题描述] R 国和S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的R 国间谍小C 终于摸清了S 国军用密码的编码规则: 1. S 国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所 得的内容均由大写字母'A'-'Z'构成(无空格等其他字符). 2. S 国对于每个字母规定了对应的"密字".加密

校赛低年级组解题报告,,,by五楼team

/*写在最前面: 我的代码不是最优的,也许蛮丑的,,, 不过,能A,(不要在意这些细节 如果看不懂,请联系我,我再做补充 由于学校oj有点坑爹,这里就把题目贴上来了 C题和F题的代码有cdm提供 */ A:矩形面积 一条绳子,用这个绳子可以围成的最大矩形的面积是多少 题目不贴了,相信大家都秒了,,, #include<cstdio> #include<iostream> using namespace std; int main(){ int T,n;scanf("%d&

2010noip提高组解题报告

https://www.luogu.org/problem/show?pid=1514 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施.水利设施有两种,分别为蓄水厂和输水站.蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的蓄水池中. 因此,只有与湖泊毗邻的第1 行的城市可以建造