zoukankan      html  css  js  c++  java
  • 今日SGU 5.2

    SGU123

    题意:求和

    收获:无

    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define dd(x) cout<<#x<<"="<<x<<" ";
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) (int)a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    #define qc std::ios::sync_with_stdio(false)
    #define db double
    #define all(a) a.begin(),a.end()
    const int mod = 1e9+7;
    const int maxn = 1e5+5;
    const double eps = 1e-6;
    using namespace std;
    bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
    bool ls(const db &a, const db &b) { return a + eps < b; }
    bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
    ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
    ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
    ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
    int read(){
        int x=0,f=1;char ch=getchar();
        while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //inv[1]=1;
    //for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    ll f[41];
    int main(){
        f[1]=1;f[2]=1;
        rep(i,3,41) f[i]=f[i-1]+f[i-2];
        int k = read();
        ll sum = 0;
        rep(i,1,k+1) sum+=f[i];
        printf("%lld
    ",sum);
        return 0;
    }
    View Code

     SGU115

    题意:求2001某月某日是星期几

    收获:注意无解的情况

    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define dd(x) cout<<#x<<"="<<x<<" ";
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) (int)a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    #define qc std::ios::sync_with_stdio(false)
    #define db double
    #define all(a) a.begin(),a.end()
    const int mod = 1e9+7;
    const int maxn = 1e5+5;
    const double eps = 1e-6;
    using namespace std;
    bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
    bool ls(const db &a, const db &b) { return a + eps < b; }
    bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
    ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
    ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
    ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
    ll read(){
        ll x=0,f=1;char ch=getchar();
        while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //inv[1]=1;
    //for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        if(m>12) return puts("Impossible"),0;
        if(n>month[m]) return puts("Impossible"),0;
        rep(i,1,m) n+=month[i];
        n%=7;if(!n)n=7;
        printf("%d
    ",n);
        return 0;
    }
    View Code

     SGU105

    题意:1,12,123,...,1....N,求这n个数字中被3整除的个数

    收获:打表

    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define dd(x) cout<<#x<<"="<<x<<" ";
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) (int)a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    #define qc std::ios::sync_with_stdio(false)
    #define db double
    #define all(a) a.begin(),a.end()
    const int mod = 1e9+7;
    const int maxn = 1e5+5;
    const double eps = 1e-6;
    using namespace std;
    bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
    bool ls(const db &a, const db &b) { return a + eps < b; }
    bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
    ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
    ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
    ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
    ll read(){
        ll x=0,f=1;char ch=getchar();
        while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //inv[1]=1;
    //for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    int bit(int x){
        int ret = 0;
        while(x) x/=10,ret++;
        return ret;
    }
    void dabiao(){
        ll sum = 0;
        rep(i,1,20){
            sum = sum * kpow(10,bit(i)) + i;
            if(sum%3==0) de(sum)
        }
    }
    int main(){
    //    dabiao();
        int n,now=1;
        scanf("%d",&n);
        n--;
        int t = n/3;
        int d = n%3;
        printf("%d
    ",t*2+d);
        return 0;
    }
    View Code

     SGU135

    题意:问你画n个线段,最多把一个无穷大的矩形分成几个区域

    收获:打表,找规律,或者可以这么想,你新加入第k条直线,最多与k-1一条直线同时相交,那么最多就会比上一次多弄出k个区间

    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define dd(x) cout<<#x<<"="<<x<<" ";
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) (int)a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    #define qc std::ios::sync_with_stdio(false)
    #define db double
    #define all(a) a.begin(),a.end()
    const int mod = 1e9+7;
    const int maxn = 65536;
    const double eps = 1e-6;
    using namespace std;
    bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
    bool ls(const db &a, const db &b) { return a + eps < b; }
    bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
    ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
    ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
    ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
    ll read(){
        ll x=0,f=1;char ch=getchar();
        while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //inv[1]=1;
    //for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    ll f[maxn];
    int main(){
        f[0]=1;f[1]=2;
        int n;
        scanf("%d",&n);
        rep(i,2,n+1) f[i]=f[i-1]+i;
        printf("%lld
    ",f[n]);
        return 0;
    }
    View Code

     SGU184

    题意:让你做饼,要求最大数量

    收获:无

    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define dd(x) cout<<#x<<"="<<x<<" ";
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) (int)a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    #define qc std::ios::sync_with_stdio(false)
    #define db double
    #define all(a) a.begin(),a.end()
    const int mod = 1e9+7;
    const int maxn = 1e5+5;
    const double eps = 1e-6;
    using namespace std;
    bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
    bool ls(const db &a, const db &b) { return a + eps < b; }
    bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
    ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
    ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
    ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
    ll read(){
        ll x=0,f=1;char ch=getchar();
        while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //inv[1]=1;
    //for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    int main(){
        int p,m,c,k,r,v;
        scanf("%d%d%d%d%d%d",&p,&m,&c,&k,&r,&v);
    //    de(c)de(v)
        printf("%d
    ",min(p/k,min(m/r,c/v)));
        return 0;
    }
    View Code

     SGU113

    题意:求一个数能不能分解成两个素数相乘

    收获:素数打表

    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define dd(x) cout<<#x<<"="<<x<<" ";
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) (int)a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    #define qc std::ios::sync_with_stdio(false)
    #define db double
    #define all(a) a.begin(),a.end()
    const int N = 1e5+5;
    bool isPrime[N];
    int prim[80000]; 
    void prime(){
        int num = 0;
        memset(isPrime,true,sizeof(isPrime));
        isPrime[0] = isPrime[1] = false;
        for(int i=2 ; i<=N ; i++){
            if( isPrime[i] ) prim[num++] = i;
            for(int j=0 ; j<num ; j++){
                if( i*prim[j]>N ) break;
                isPrime[ i*prim[j] ] = false;
                if( i%prim[j] == 0 ) break;
            }
        }
    }
    bool isprime(int x){
        for(int i=2;i*i<=x;++i) if(x%i==0) return false;
        return true;
    }
    bool ok(int x){
        for(int i=2;i*i<=x;++i){
            if(x%i==0&&isPrime[i]){
                if(isprime(x/i)) return true;
            }
        }
        return false;
    }
    int main(){
        prime();
        int n,x;
        scanf("%d",&n);
        rep(i,0,n){
            scanf("%d",&x);
            puts(ok(x)?"Yes":"No");
        }
        return 0;
    }
    View Code

     SGU112

    题意:求a^b-b^a

    收获:kuangbin的string高精度板子,用了std::ios::sync_with_stdio(false),不能再用printf和scanf了,会出现奇怪的错误,会wa

    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define dd(x) cout<<#x<<"="<<x<<" ";
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) (int)a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    #define qc std::ios::sync_with_stdio(false)
    #define db double
    #define all(a) a.begin(),a.end()
    const int mod = 1e9+7;
    const int maxn = 1e5+5;
    const double eps = 1e-6;
    using namespace std;
    bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
    bool ls(const db &a, const db &b) { return a + eps < b; }
    bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
    ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
    ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
    ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
    ll read(){
        ll x=0,f=1;char ch=getchar();
        while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //inv[1]=1;
    //for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    string add(string str1,string str2)//高精度加法
    {
        string str;
    
        int len1=str1.length();
        int len2=str2.length();
        //前面补0,弄成长度相同
        if(len1<len2)
        {
            for(int i=1;i<=len2-len1;i++)
               str1="0"+str1;
        }
        else
        {
            for(int i=1;i<=len1-len2;i++)
               str2="0"+str2;
        }
        len1=str1.length();
        int cf=0;
        int temp;
        for(int i=len1-1;i>=0;i--)
        {
            temp=str1[i]-'0'+str2[i]-'0'+cf;
            cf=temp/10;
            temp%=10;
            str=char(temp+'0')+str;
        }
        if(cf!=0)  str=char(cf+'0')+str;
        return str;
    }
    string mul(string str1,string str2)
    {
        string str;
        int len1=str1.length();
        int len2=str2.length();
        string tempstr;
        for(int i=len2-1;i>=0;i--)
        {
            tempstr="";
            int temp=str2[i]-'0';
            int t=0;
            int cf=0;
            if(temp!=0)
            {
                for(int j=1;j<=len2-1-i;j++)
                  tempstr+="0";
                for(int j=len1-1;j>=0;j--)
                {
                    t=(temp*(str1[j]-'0')+cf)%10;
                    cf=(temp*(str1[j]-'0')+cf)/10;
                    tempstr=char(t+'0')+tempstr;
                }
                if(cf!=0) tempstr=char(cf+'0')+tempstr;
            }
            str=add(str,tempstr);
        }
        str.erase(0,str.find_first_not_of('0'));
        return str;
    }
    string sub(string str1,string str2)//高精度减法
    {
        string str;
        int tmp=str1.length()-str2.length();
        int cf=0;
        for(int i=str2.length()-1;i>=0;i--)
        {
            if(str1[tmp+i]<str2[i]+cf)
            {
                str=char(str1[tmp+i]-str2[i]-cf+'0'+10)+str;
                cf=1;
            }
            else
            {
                str=char(str1[tmp+i]-str2[i]-cf+'0')+str;
                cf=0;
            }
        }
        for(int i=tmp-1;i>=0;i--)
        {
            if(str1[i]-cf>='0')
            {
                str=char(str1[i]-cf)+str;
                cf=0;
            }
            else
            {
                str=char(str1[i]-cf+10)+str;
                cf=1;
            }
        }
        str.erase(0,str.find_first_not_of('0'));//去除结果中多余的前导0
        return str;
    }
    int bit(int x){
        int ret = 0;
        while(x) x/=10,ret++;
        return ret;
    }
    string change(int x){
        char s[520];
        int len = bit(x) - 1;
        s[len+1] = '';
        while(x){
            s[len--]=(x%10+'0');
            x/=10;
        }
        string ss = s;
        return ss;
    }
    bool big(string a,string b){
        if(sz(a)<sz(b)) return false;
        if(sz(a)>sz(b)) return true;
        return a>b;
    }
    int main(){
        qc;
        bool fg=false;
        int ta,tb;
        cin>>ta>>tb;
        string a,b;
        a=change(ta),b=change(tb);
    //    de(a)de(b)
        string ansa=a,ansb=b;
        rep(i,1,tb) ansa=mul(ansa,a);
        rep(i,1,ta) ansb=mul(ansb,b);
        if(big(ansb,ansa)) fg=true,swap(ansa,ansb);
        if(fg) cout<<'-';
        string ans=sub(ansa,ansb);
        cout<<ans;
        return 0;
    }
    View Code
  • 相关阅读:
    C#CreateGraphics方法的三种实现方式
    二叉树的性质和常用操作代码集合
    《Java程序设计基础》 第8章手记Part 2
    《Java程序设计基础》 第8章手记Part 1
    STL 算法罗列 (转)
    STL 练习
    STL所有算法简介 (转) http://www.cnblogs.com/yuehui/archive/2012/06/19/2554300.html
    linux 解压命令
    杭电1016
    杭电1257
  • 原文地址:https://www.cnblogs.com/chinacwj/p/8982168.html
Copyright © 2011-2022 走看看