给不开窍的自己
B题:快速幂 + 快速乘(脑子不够灵光,知道快速幂,却不会联想到快速乘)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qu(ll a,ll b,ll p)
{
ll ans=0;
a%=p;
while(b)
{
if(b%2) ans=(ans+a)%p;
b>>=1;
a=(a+a)%p;
}
return ans%p;
}
ll qui(ll a,ll b,ll p)
{
ll ans=1;
a%=p;
while(b)
{
if(b%2==1) ans=qu(ans,a,p);
b>>=1;
a=qu(a,a,p);
}
return ans;
}
int main()
{
ll n,a,b,p;
cin>>n;
while(n--)
{
cin>>a>>b>>p;
cout<<qui(a,b,p)<<endl;
}
return 0;
}
E题:二分(见过的题目,却没有好好去做完)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll maxn=100005;
ll L[maxn*2];
ll ans,n,k,sum;
void solve(ll l,ll r)
{
if(l>=r) return ;
ll t=(l+r)/2+1;
sum=0;
for(ll i=0;i<n;++i)
{
sum=sum+L[i]/t;
}
if(sum>=k)
{
ans=max(t,ans);
solve(t,r);
}
else solve(l,t-1);
}
int main()
{
ll i;
cin>>n>>k;
ll t=0;
for(i=0;i<n;i++) cin>>L[i],t+=L[i];
t/=k;
// cout<<t<<endl;
solve(0,t);
cout<<ans<<endl;
return 0;
}
J题:find函数(不久前还用了这个find函数,没仔细考虑数据量,却想到了ac自动机,ac自动机是完全错的,如果有大佬写出来了麻烦给下地址,给萌新瞅瞅!!!)
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000005;
string a,b;
int main()
{
int n,i,j;
cin>>a;
cin>>n;
while(n--)
{
cin>>b;
string::iterator it1=b.begin(),it2=a.begin();
bool f=1;
while(it1<b.end()&&it2<a.end())
{
it2=find(it2,a.end(),*it1);
it1++;
it2++;
}
if(it1==b.end()&&it2<=a.end()) cout<<"Yes";
else cout<<"No";
cout<<"\n";
}
return 0;
}
与E题类似:
问题描述
儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。
小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。
为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:
1. 形状是正方形,边长是整数
2. 大小相同
例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。
当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么?
输入格式
第一行包含两个整数N和K。(1 <= N, K <= 100000)
以下N行每行包含两个整数Hi和Wi。(1 <= Hi, Wi <= 100000)
输入保证每位小朋友至少能获得一块1x1的巧克力。
输出格式
输出切出的正方形巧克力最大可能的边长。
样例输入
2 10
6 5
5 6
样例输出
2
数据规模和约定
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
以上。