暴力,没啥好说的。。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=50005;
int main()
{
int a,b,c;
int x,y,z;
cin>>a>>b>>c;
cin>>x>>y>>z;
if(a<x) cout<<"2"<<endl;
else if(a>x) cout<<"1"<<endl;
else {
if(b<y) cout<<"1"<<endl;
else if(b>y)cout<<"2"<<endl;
else {
if(c<z) cout<<"1"<<endl;
else if(c>z) cout<<"2"<<endl;
else cout<<"God"<<endl;
}
}
return 0;
}
暴力,同样没啥好说的
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=50005;
int main()
{
int T,n;
cin>>T;
string s;
while(T--)
{
cin>>n;
int cou=0;
while(n!=1)
{
if(n%10!=0)
{
n++;
cou++;
}
else {
cou++;
n/=10;
}
}
cout<<cou<<endl;
}
return 0;
}
官方求解过程如上。。反正我随便打了个表看了眼192的等差数列。。。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=50005;
inline int read()
{
char ch = getchar(); int x = 0, f = 1;
while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}
while('0' <= ch && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
return x * f;
}
int main()
{
int T;
ll a,b;
T=read();
while(T--)
{
cin>>a>>b;
while(b%192!=1) b--;
while(a%192!=1) a++;
if(a>b) cout<<"0"<<endl;
else cout<<(b+a)*((b-a)/192+1)/2<<endl;
}
return 0;
}
官方题解如上。
个人想法,要让收益最大,必然是最小的堆去和最大的堆合并,那么排个序,由大堆往小堆合并,最后的时候必然出现最大堆和最小堆的合并,那么就是收益最大的方法。所以排个序求前n-1项和就是答案。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=50005;
inline int read()
{
char ch = getchar(); int x = 0, f = 1;
while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}
while('0' <= ch && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
return x * f;
}
int a[10005];
int main()
{
int T,n;
T=read();
while(T--)
{
n=read();
for(int i=0;i<n;i++)
{
a[i]=read();
}
sort(a,a+n);
ll k=0;
for(int i=0;i<n-1;i++) k+=a[i];
printf("%lld\n",k);
}
return 0;
}
官方题解如上
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=100000+10;
ll a[maxn];
inline int read()
{
char ch = getchar(); int x = 0, f = 1;
while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}
while('0' <= ch && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
return x * f;
}
int main()
{
int T;T=read();
while(T--)
{
ll n,m;
ll index=-1,maxx=-1;
scanf("%lld %lld",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
if(maxx<a[i])
{
maxx=a[i];
index=i;
}
}
ll l=m,r=m;
bool flag=0;
for(int i=0;;i++,i%=n)
{
if(i==index)
{
if(l<=0)
{
flag=1;break;
}
l-=a[i],r-=a[i];
}
else{
if(r<=0)
{
flag=0;break;
}
l-=a[i],r--;
}
}
if(flag) puts("YES");
else puts("NO");
}
return 0;
}
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=100000+10;
int s1[maxn],s2[maxn];
char a[maxn];
inline int read()
{
char ch = getchar(); int x = 0, f = 1;
while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}
while('0' <= ch && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
return x * f;
}
int main()
{
int T;T=read();
while(T--)
{
int n,m;
n=read();m=read();
scanf("%s",a+1);
for(int i=1;i<=n;++i)
{
s1[i]=s1[i-1];
s2[i]=s2[i-1];
if(a[i]=='1')s1[i]++;
else s2[i]++;
}
int ans=0;
for(int i=1;i<=n;++i)
{
ans=max(ans,i-(lower_bound(s1,s1+1+n,s1[i]-m)-s1));
ans=max(ans,i-(lower_bound(s2,s2+1+n,s2[i]-m)-s2));
}
printf("%d\n",ans);
}
return 0;
}