试题地址
https://www.nowcoder.com/test/17963624/summary
1
沫璃有一个画板,画板可以抽象成有100行每行100个像素点的正方形。沫璃在画板上画画,她一共画了n次,每次将一个矩形涂上颜色。沫璃想知道一共有多少个像素点被她涂过颜色。若一个像素点被涂了k次,那么认为有k个像素点被涂过颜色。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
ll x11,y11,x22,y22;
ll ans;
ll n;
int main(){
cin>>t;
while(t--){
ans=0;
cin>>n;
for(ll i=0;i<n;i++){
cin>>x11>>y11>>x22>>y22;
ans+=((x22-x11+1)*(y22-y11+1));
}
cout<<ans<<endl;
}
return 0;
}
2
沫璃发起了一场交易,她将她的5个朋友聚在一起准备进行一场交易。交易开始前,大家各有b(b>0)个硬币,交易后,每个人有ai个硬币。由于硬币不方面携带,在交易过程中可能会丢失。现在沫璃想知道是否一定丢失硬币,或者在可能没有丢失硬币的情况下,交易前每个人的硬币数b。沫璃只是组织者,不参与交易。
n=int(input())
for i in range(n) :
g = map(int, raw_input().strip().split())
if sum(g)==0 :
print(-1)
elif sum(g)%5==0 :
print(sum(g)/5)
else :
print(-1)
3
沫璃邀请她的朋友参加周末的派对。沫璃买了3种颜色的气球,现在她要有这些气球来装饰餐桌,每个餐桌只用恰好3个气球装饰,要求3个气球的颜色不能完全一样,可以是2种或者3种颜色。沫璃想知道这些气球最多能装饰多少张餐桌。
一道cf风格的智力题,不会,看的解析
//两种情况:
// 1)最大的那个数大于其他两个数之和的两倍,输出最小的和次小的数之和
// 2)直接三个数除以3
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
ll a[10];
int main(){
cin>>t;
while(t--){
memset(a,0,sizeof(a));
cin>>a[0]>>a[1]>>a[2];
sort(a,a+3);
if(a[2]>2*(a[0]+a[1])) cout<<a[0]+a[1]<<endl;
else cout<<(a[0]+a[1]+a[2])/3<<endl;
}
return 0;
}
4
茉莉有2n匹马,每匹马都有一个速度v,现在茉莉将马分为两个队伍,每个队伍各有n匹马,两个队之间进行n场比赛,每场比赛两队各派出一匹马参赛,每匹马都恰好出场一次。茉莉想知道是否存在一种分配队伍的方法使得无论怎么安排比赛,第一个队伍都一定能获的全胜,两匹马若速度不同,那么速度快的获胜,若速度一样,则都有可能获胜。
排序后判断是否a[n-1]<a[n]即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
int n;
ll a[1000];
bool flag=true;
int main(){
cin>>t;
while(t--){
memset(a,0,sizeof(a));
flag=true;
cin>>n;
for(int i=0;i<2*n;i++){
cin>>a[i];
}
sort(a,a+2*n);
//for(int i=0;i<2*n;i++) cout<<a[i]<<" ";
if(a[n-1]<a[n]) flag=true;
else flag=false;
if(!flag) puts("NO");
else puts("YES");
}
return 0;
}
5
有K种不同的玫瑰花,现在要摆放在N个位置上,要求每种颜色的花至少出现过一次,请问有多少种不同的方案数呢?,因为答案可能很大,你只需要输出它对772235取余后的结果.
不会。如果是数学题就直接mma求和那个显式公式了
Needs["Combinatorica`"]
f[n_Integer, k_Integer] :=
Sum[Multinomial @@
i, {i, # + ConstantArray[1, k] & /@ Compositions[n - k, k]}]
f[3, 2]
作为编程题,反正你显式公式都出来了,猜一个递推公式问题不大(?,我没猜出来)
一种是
第一项对应的是说最后1位的颜色在前面未曾出现过,第二项对应的是说最后1位的颜色在前面已经出现过
//非本人编写
#include <bits/stdc++.h>
using namespace std;
const int maxn = 50000 + 7;
const int mod = 772235;
int n, m;
int dp[maxn][32];
int main(){
scanf("%d %d", &n, &m);
dp[1][1] = 1;
for(int i = 2; i <= n; ++i)
for(int j = 1; j <= m; ++j)
dp[i][j] = (dp[i-1][j-1] + dp[i-1][j]) % mod * j % mod;
cout << dp[n][m] << endl;
return 0;
}
另一种是
思路很容易懂,把\(k^n\)个排列做了分类
代码欠着
6
给你一个图,0节点连接这一个联通块a,1节点连接着一个联通块b,ab仅由01这条边相连。现在我们定义奇异路径为恰好经过0-1这条边一次的路径。在这个图中有无数条奇异路径,问第k长的奇异路径长度是多少?
欠着