https://codeforces.com/contest/1530/problem/A
要求一个数能被多少个只由1和0组成的数相加得到。比如
55=11+11+11+11+11,五个。
651=111+110+110+110+110+100;六个
输出数每一位里面最大的那个数就行。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
inline ll read()
{
ll x=0,w=1; char ch=0;ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*w;
}
inline void print(ll x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)print(x/10);
putchar(x%10+48);
}
int t; char str[105];
void solve()
{
cin>>str;
int len=strlen(str);
int maxn=0;
for(int i=0;i<len;i++)
{
if(str[i]-'0'>=maxn)maxn=str[i]-'0';
}
cout<<maxn<<endl;
}
int main()
{
ios
cin>>t;
while(t--)solve();
return 0;
}
https://codeforces.com/contest/1530/problem/B
搜索,水题。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
inline ll read()
{
ll x=0,w=1; char ch=0;ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*w;
}
inline void print(ll x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)print(x/10);
putchar(x%10+48);
}
int xx[3]={0,1},yy[3]={1,0};
int xxx[13]={-1,-1,0,1,1,1,-1,0,0},yyy[19]={-1,1,0,-1,1,0,0,-1,1};
bool f[105][105];
int t,n,m;
void dfs(int x,int y)
{
int flag=0;
for(int i=0;i<9;i++)
{
int tx=x+xxx[i],ty=y+yyy[i];
if(f[tx][ty]==1)flag=1;
}
if(!flag)f[x][y]=1;
for(int i=0;i<2;i++)
{
int ttx=x+xx[i],tty=y+yy[i];
if((ttx==1||tty==1||ttx==n||tty==m)&&ttx<=n&&tty<=m)
dfs(ttx,tty);
}
}
void solve()
{
cin>>n>>m;
memset(f,0,sizeof(f));
dfs(1,1);
rep(i,1,n)
{
rep(j,1,m)
cout<<f[i][j];
cout<<endl;
}
}
int main()
{
ios
cin>>t;
while(t--)solve();
return 0;
}
https://codeforces.com/contest/1530/problem/C
有n场比赛,分别有a,b两个人的成绩,总成绩只取最高的n*3/4(向上取整)场之和。
问你添加多少场之后,a的成绩会比b的成绩高(成绩可以任意添加)
在添加完之后,依然取 最高的 n*3/4 场。
想法是模拟,对a一直加100分,对b一直加0分,
那么每轮就对a取最高分之后一直加100,对b取完最高分的和之后把较低的分数加上去,如果超过n个数,就取b所有分数的和。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
inline ll read()
{
ll x=0,w=1; char ch=0;ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*w;
}
inline void print(ll x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)print(x/10);
putchar(x%10+48);
}
bool cmp(int a,int b)
{
return a>b;
}
const int maxn=2e5+5;
int n,a[maxn],b[maxn],t;
int prea[maxn],preb[maxn];
void solve()
{
cin>>n;
rep(i,1,n)cin>>a[i];
rep(i,1,n)cin>>b[i];
sort(a+1,a+1+n,cmp);
sort(b+1,b+1+n,cmp);
prea[0]=0,preb[0]=0;
for(int i=1;i<=n;i++)
prea[i]=prea[i-1]+a[i];
for(int i=1;i<=n;i++)
preb[i]=preb[i-1]+b[i];
// if(suma>sumb)
// {
// cout<<0<<endl;
// return;
// }
int cnt=0;
while(1)
{
int k=cnt+n;
int d=k-k/4;
int suma=0,sumb=0;
suma=cnt*100+prea[d-cnt];
if(d<n)sumb=preb[d];
else sumb=preb[n];
if(suma>=sumb)
{
cout<<cnt<<endl;
return;
}
cnt++;
}
}
int main()
{
ios
cin>>t;
while(t--)solve();
return 0;
}