西南民族大学第十二届程序设计竞赛

*传送门

B.求快速幂的和

快速幂模板

LL qmi(int a, int b, int p)
{
    LL res = 1 % p;
    while (b)
    {
        if (b & 1) res = res * a % p;
        a = a * (LL)a % p;
        b >>= 1;
    }
    return res;
    ///快速幂就是将x ^ n 的n次方换成了2^t1+2^t2+…+2^tk
}
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
typedef long long ll;

ll qpow(ll x, ll y){
    ll res = 1;
    while(y){
        if(y & 1) res = (res * x) % mod;
        y >>= 1;
        x = (x * x) % mod;
    }
    return res;
}

ll n, m;
int main(){
    
    cin >> n >> m;
    
    ll ans = 0;
    
    for(ll i = n; i <= m; ++i)
    {
        ans = (ans + qpow(4, i)) % mod;
    }
    cout << ans << "\n";
}

D.普通模拟(从小到大 即为最小)

#include<bits/stdc++.h>
using namespace std;

struct node{
    int s, b, c;
}a[105];

int n, r;

bool cmp(node x, node y){
    return x.b < y.b;
}

int main(){
    cin >> n >> r;
    int sum = 0;
    for(int i = 1 ; i <= n; ++i){
        cin >> a[i].s >> a[i].b >> a[i].c;
        sum += a[i].s;
    }
    sort(a + 1, a + 1 + n, cmp);
    int p = 0;
    for(int i = 1; i <= n; ++i){
        int tmp = a[i].c - a[i].s;
        if(sum + tmp >= r){
            tmp = r - sum;
            p += a[i].b * tmp;            
            break;
        }
        p += tmp * a[i].b;
        sum += tmp;
    }
    cout << p << "\n";
}

E.并查集求集合个数

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3+10;
int p[N];
int n,d;

int find(int x)
{
    if(x!=p[x])
        return p[x]=find(p[x]);
    return p[x];
}
struct node
{
    int x,y;
} a[N];
int main()
{
    cin>>n>>d;
    for(int i=1; i<=n; i++)
        p[i] =i;

    for(int i=1; i<=n; i++)
        cin>>a[i].x>>a[i].y;

    int ans=0;
    for(int i=1;i<n; i++)
    {
        int t =find(i);
        for(int j=i+1;j<=n;j++)
        {
            int dis = (a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);
            if(dis<=d*d)
            {
                int t2 =find(j);
                p[t2]=t;
            }

        }
    }
    for(int i=1;i<=n;i++)
    {
        if(p[i]==i)
            ans++;
    }

    cout<<ans;
    return 0;
}

F.签到题

G.字符串匹配(查找字符串出现的次数)

因为数据范围挺小,直接使用库函数了

小tips
1.substr(begin,next) 做剪切操作
2.string 自带匹配 == ,不过不要忘了初始化 =""

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node
{
    string name;
    int bhb=0,jz=0;
    int sum = 0;

} a[5];
bool cmp (node x,node y)
{
    return x.sum>y.sum;
}

int main()
{
    a[0].name="qh";
    a[1].name="sh";
    a[2].name="hl";
    a[3].name="xx";
    a[4].name="kt";

    for(int i=0; i<5; i++)
    {
        string s;
        cin>>s;
        for(int j =0; j<s.size(); j++)
        {
            string tmp = "";
            if(j+6<=s.size())
            {
                tmp =s.substr(j,7);///剪切函数
                if(tmp =="buhuiba")///匹配
                    a[i].bhb++;
            }

            if(j+5<=s.size())
            {
                tmp =s.substr(j,6);
                if(tmp == "jiuzhe")
                    a[i].jz++;
            }
        }
        a[i].sum =a[i].bhb+a[i].jz;
    }
    for(int i=0;i<5;i++)
    {
        cout<<a[i].name<<" "<<a[i].bhb<<" "<<a[i].jz<<endl;
    }
    sort(a,a+5,cmp);
    if(a[0].sum==a[1].sum)
        cout<<"yygqdss"<<endl;
    else
        cout<<a[0].name;
    return 0;
}

I.矩阵乘法的代码实现

队友牛逼

#include <bits/stdc++.h>
using namespace std;
int main(void)
{
    int n;
    int a[210][210];
    int b[210][210];
    int c[210][210];
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>b[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            for(int k=1;k<=n;k++)
            {
                c[i][j]=c[i][j]+a[i][k]*b[k][j];
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cout<<c[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

J.C语言基础题

事前(WA 4发)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int  N =110;


int main()
{

    cout<<"\\(X_X)/ Says :";
    char g ='"';

    cout<<" "<<g<<"I can 100% print this !"<<g;
    return 0;
}

事后(转义字符牛啊)

#include <bits/stdc++.h>
using namespace std;
int main()
{
    cout<<"\\(X_X)/ Says : \"I can 100% print this !\""<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值