A:就是这种情况可不可能。容易错的是,去了A的人数和去了B的人数都要大于等于既去了A又去了B的。
B:就是至少要重修几门。重修后分数为5.暴力解决
C:只要看出这个是单调的就好了,二分出答案
#include<stdio.h>
#define LL long long
LL n;
LL Jud(LL x)
{
LL now, sum;
now = n, sum = 0;
while(now)
{
if(now<=x)
{
sum += now;
break;
}
now -= x;
sum += x;
now -= now/10;
}
return sum;
}
int main(void)
{
LL l, r, m;
scanf("%I64d", &n);
l = 1, r = n;
while(l<r)
{
m = (l+r)/2;
if(Jud(m)>=(n+1)/2)
r = m;
else
l = m+1;
}
printf("%I64d\n", l);
return 0;
}
D:这个题的坑点就在于,你如果要从左开始排,那么就要先考虑左边上下的两个再考虑右边的,这样“贪心”才是正确的。不能先排右边的,因为我是从左到右,就像玩俄罗斯方块一样。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s,t;
int c[2][110];
cin>>s>>t;
int num=s.length();
for(int i=0;i<num;i++)
{
if(s[i]=='X')
c[0][i]=1;
else
c[0][i]=0;
}
for(int i=0;i<num;i++)
{
if(t[i]=='X')
c[1][i]=1;
else
c[1][i]=0;
}
int ans=0;
for(int i=1;i<num;i++)
{
if(c[0][i-1]==0&&c[1][i-1]==0&&c[0][i]==0)
{
ans++;
c[0][i-1]=c[1][i-1]=c[0][i]=1;
}
if(c[0][i-1]==0&&c[1][i-1]==0&&c[1][i]==0)
{
ans++;
c[0][i-1]=c[1][i-1]=c[1][i]=1;
}
if(c[0][i]==0&&c[1][i]==0&&c[0][i-1]==0)
{
ans++;
c[0][i]=c[1][i]=c[0][i-1]=1;
}
if(c[0][i]==0&&c[1][i]==0&&c[1][i-1]==0)
{
ans++;
c[0][i]=c[1][i]=c[1][i-1]=1;
}
}
cout<<ans<<endl;
}
E:看了别人的代码还是不会写,思路就是很简单,就是枚举所有的组合情况,然后把以0开头的给删掉就行了。
待补。。。暂存下“别人家的代码”
#include<stdio.h>
#define LL long long
char str[1005];
LL ans, num[22], a[22], jc[22] = {1};
void Sech(int x)
{
LL i, now, p, sum;
if(x==10) //最多十个数 0--9
{
now = 1, sum = 0; //计算组合数过程
for(i=0;i<=9;i++)
{
now = now*jc[a[i]]; //计算分母的重复元素
sum += a[i]; //计算一共出现的次数
}
now = jc[sum]/NOw; //利用公式算出组合数
if(a[0]>=1) //计算0在第一个位置的组合数
{
p = jc[a[0]-1];
for(i=1;i<=9;i++)
p = p*jc[a[i]]; //计算分母的重复元素
now -= jc[sum-1]/p; //全部组合数-0在开头的组合数
}
ans += now;
return;
}
for(i=1;i<=num[x];i++) //枚举x出现的次数
{
a[x] = i; //给x赋值出现的次数
Sech(x+1); //继续dfs
}
if(num[x]==0)
Sech(x+1); //如果x没出现过,跳过
}
int main(void)
{
LL i;
scanf("%s", str+1);
for(i=1;i<=19;i++)
jc[i] = jc[i-1]*i; //求解组合数最大19
for(i=1;str[i]!=0;i++)
num[str[i]-'0']++; //预处理每个数字出现的次数
Sech(0); //开始dfs
printf("%I64d\n", ans);
return 0;
}
总结一下这场比赛,除去时间太晚没打完就睡觉了这一客观条件,发现自己的读题能力近来又有些下降,我的小伙伴们读题都比我快,然后当我刚做完第二道题时,L大佬C,D都过了。发现自己的思维还是不行啊,赛后重新看了看,发现真的挺简单的。
比赛还是要多打才行,练手感和思维敏捷度。
这段时间简直要爆炸了。好方。