https://ac.nowcoder.com/acm/contest/893#question
A:签到1
#include<algorithm>
#include<cstring>
#include<iostream>
#include<math.h>
#include<string>
#include<stdio.h>
#include<map>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int n1,n2,p1,p2,s1,s2;
int main()
{
while(cin>>n1>>p1>>s1>>n2>>p2>>s2)
{
if(n1>n2)
printf("1\n");
else if(n1<n2)
printf("2\n");
else
{
if(p1<p2)
printf("1\n");
else if(p1>p2)
printf("2\n");
else
{
if(s1<s2)
printf("1\n");
else if(s1>s2)
printf("2\n");
else
printf("God\n");
}
}
}
return 0;
}
B:签到2
#include<algorithm>
#include<cstring>
#include<iostream>
#include<math.h>
#include<string>
#include<stdio.h>
#include<map>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int n;
ll a[300005];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
{
ll x=a[i];
ll cnt=0;
while(x>1)
{
if(x%10==0)
x=x/10;
else
x++;
cnt++;
}
printf("%lld\n",cnt);
}
return 0;
}
C:签到3,打印观察a的值有规律,192的倍数+1,等差求和
#include<algorithm>
#include<cstring>
#include<iostream>
#include<math.h>
#include<string>
#include<stdio.h>
#include<map>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int t;
ll l,r,n;
int main()
{/*
for(ll i=1;i<=10000;i++)
if(i*i*i%192==1)
printf("%lld\n",i);*/
scanf("%d",&t);
while(t--)
{
cin>>l>>r;
ll sum=0;
while(l%192!=1)
l++;
while(r%192!=1)
r--;
n=r/192-l/192+1;
sum=((l+r)/2)*n;
printf("%lld\n",sum)
}
return 0;
}
D:签到4,每次依附到最大的那一堆,结果是:总和-最大
#include<algorithm>
#include<cstring>
#include<iostream>
#include<math.h>
#include<string>
#include<stdio.h>
#include<map>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int t,n;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ll maxx=-1,sum=0,x;
for(int i=0;i<n;i++)
{
scanf("%lld",&x);
sum+=x;
maxx=max(maxx,x);
}
printf("%lld\n",sum-maxx);
}
return 0;
}
F:尺取法,详看注释
#include<algorithm>
#include<cstring>
#include<iostream>
#include<math.h>
#include<string>
#include<stdio.h>
#include<map>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int t;
int n,m;
string s;
int main()///尺取法
{
scanf("%d",&t);
while(t--)
{
cin>>n>>m;
cin>>s;
int num,l,r,k,ans;///num表示当前的价值,k表示当前执行了多少次操作
ans=k=num=l=r=0;
while(r<n)///算0的价值
{
while( (r<n && k<m)||(s[r]=='0') )///有操作机会 或者 当前是0即不需要操作
{
if(s[r]=='0')
{
num++;
r++;
}
else if(s[r]=='1' && k<m)
{
num++;
k++;
r++;
}
ans=max(ans,num);
}
///r走不动了,轮到l来走
if(s[l]=='0')
{
num--;
l++;
}
else
{
num--;
k--;///之前用一次机会把1变成0,现在不要这个1,操作次数要减少
l++;
}
ans=max(ans,num);
}
k=num=l=r=0;
while(r<n)///算1的价值
{
while( (r<n && k<m)||(s[r]=='1') )///有操作机会 或者 当前是0即不需要操作
{
if(s[r]=='1')
{
num++;
r++;
}
else if(s[r]=='0' && k<m)
{
num++;
k++;
r++;
}
ans=max(ans,num);
}
if(s[l]=='1')
{
num--;
l++;
}
else
{
num--;
k--;///之前用一次机会把0变成1,现在不要这个0,操作次数要减少
l++;
}
ans=max(ans,num);
}
printf("%d\n",ans);
}
return 0;
}
来源:oschina
链接:https://my.oschina.net/u/4413564/blog/3550224