《Z的悲剧》
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll mod = 1000000007;
ll n,m;
int main()
{
cin>>n>>m;
ll a = (m-1)%mod*m%mod*(n-2)%mod*2%mod;
ll b = (m-2)%mod*m%mod*(n-1)%mod*2%mod;
ll c = (n-1)%mod*n%mod*(m-2)%mod*2%mod;
ll d = (n-2)%mod*n%mod*(m-1)%mod*2%mod;
//ll re1 = (m-2)%mod*(n-1)%mod*4%mod;
//ll re2 = (n-2)%mod*(m-1)%mod*4%mod;
//ll re = (re1+re2)%mod;
ll sum = (a+b+c+d)%mod;
//sum = (sum-re)%mod;
cout<<sum<<endl;
//cout<<(a%mod+b%mod+c%mod+d%mod-re1%mod-re2%mod)%mod<<endl;
system("pause");
return 0;
}
签到题
#include<iostream>
#include<cstdlib>
using namespace std;
typedef long long ll;
int main()
{
//ios::sync_with_stdio(false);
//cin.tie(NULL);
//cout.tie(NULL);
double n,x,a,b;
cin>>n>>x>>a>>b;
double ans = a*x/100.0+b-b*x/100.0;
ans = ans * n;
printf("%.2f\n",ans);
system("pause");
return 0;
}
签到题
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
typedef long long ll;
ll n;
ll a[100001];
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n;
//memset(a,0,sizeof(a));
for(ll i = 1;i<n;++i)
{
int x;
cin>>x;
a[x]++;
}
ll flag ;
for(ll i=1;i<=n;++i)
{
if(a[i]==0)
{
flag = i;
break;
}
}
cout<<flag<<endl;
//system("pause");
return 0;
}
暴力求解就可以,在这里用到约束个数定理
#include<iostream>
using namespace std;
typedef long long ll;
ll n;
ll count(ll n)
{
ll s = 1;
for(ll i =2;i*i <= n;++i)
{
if(n%i==0)
{
ll a = 0;
while(n%i==0)
{
n = n/i;
a++;
}
s = s*(a+1);
}
}
if(n>1) s = s * 2;
return s;
}
int main()
{
cin>>n;
ll num = 1;
while(count(n)!=2)
{
n = count(n);
num++;
}
cout<<num<<endl;
system("pause");
return 0;
}
这道题可以用尺取法来解决
#include<iostream>
#include<cstdlib>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
ll n,k;
int main()
{
cin>>n>>k;
string s;
cin>>s;
int l,r,ans;
ans = INF;
int a[100]={0};
l = r = 0;
while(r<s.size())
{
a[s[r]-'a']++;
while(a[s[r]-'a']>=k)
{
ans = min(ans,r-l+1);
a[s[l]-'a']-=1;
l++;
}
r++;
}
if(ans==INF)
cout<<-1<<endl;
else
cout<<ans<<endl;
system("pause");
return 0;
}
用到二分+前端和,check()部分不算是太明白,贴上代码
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int a[200009];
int n,k;
bool check(int x)
{
for(int i=x;i<=n;i++)
{
int ans = a[i]-a[i-x];//求零的数量也就是操作次数
if(ans<=k||x-ans<=k)//如果0的数量比K小,那就在区间的右侧;
return 1;
}
return 0;//否则在区间左侧
}
int main()
{
cin >> n >> k;
string s;
cin>>s;
a[1] = s[0]-'0';
/*前缀和*/
for(int i=1;i<n;++i)
{
a[i+1]=a[i]+s[i]-'0';
//cout<<a[i]<<endl;
}
/*二分*/
int l = 1,r = n,mid;
while(l<=r)
{
mid = (l+r)>>1;
if(check(mid))
{
if(!check(mid+1))
break;
l = mid+1;
}
else
r = mid-1;
}
cout << mid <<endl;
system("pause");
return 0;
}
最后总结,菜是罪恶的源泉。