*传送门
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;
}