MC0121成绩查询系统
#include<bits/stdc++.h>
using namespace std;
#define maxn 1010
using namespace std;
struct STUDENT{
int id, a, b, sum;
};
bool cmp(STUDENT x, STUDENT y){
if (x.sum > y.sum) return true;
if (x.sum < y.sum) return false;
if (x.a > y.a) return true;
if (x.a < y.a) return false;
if (x.id > y.id) return true;
return false;
}
int main()
{
STUDENT stu[maxn];
int n;
cin >> n;
for (int i = 0; i < n; ++i){
cin >> stu[i].id >> stu[i].a >> stu[i].b;
stu[i].sum = stu[i].a +stu[i].b;
}
sort(stu,stu+n,cmp);
int q;
cin >> q;
for (int i=1;i<=q;++i){
int x, y;
cin >> x >> y;
if (x==1){
for (int i =0;i<n;i++)
if (stu[i].id == y){
printf("%d %d\n",stu[i].sum, i + 1);
break;
}
}
else{//2号查询
if (stu[0].sum < y)
printf("0\n");
else for (int i=n-1;i>=0;i--)
if(stu[i].sum>=y){
printf("%d\n",i+1);
break;}
}
MC0122 检查电脑
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int p, n;
cin >> p >> n;
double ans = 1,q = p/100.0;
for(int i=1;i<n;i++) ans *= (1-q);
ans *= q;
printf("%.2lf\n",ans);
return 0;
}
MC0123 最大子面积
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a, b;
cin >> a >>b;
if(a<b) swap(a,b); // 保证a大于等于b
int S = b * b;
int c = min(b,a-b);
S += c * c;
cout << S << endl;
return 0;
}
MC0124 降雨量
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
int c[maxn];
int main( )
{
int A, B, H1, H2, H,n;
cin >> A >> B >> H1 >> H2 >> H >> n;
for (int i =1;i <= n; i++) cin >> c[i];
bool flag = false;
for (int i=1;i<=n;i++){
H += c[i] - A;
if(flag) H -=B;
H = max(H, 0);
if (H > H1) flag = true;
if(H <=H2) flag = false;
}
cout << H <<endl;
return 0;
}
MC0125教材购买
#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;
int main( )
{
int a[maxn] = {0},c[maxn] = {0};
int n;
cin >> n;
for (int i=1;i <= n;i++)
cin >> a[i];
for (int i=1;i<=n;i++)
cin >> c[i];
int m;
cin >> m;
for (int i=1;i<=m;i++){
int id, val;
cin >> id >> val;
if(val <= a[id]){
a[id] -= val;
cout << val * c[id] << '\n';
}
else cout << "bugoule" << '\n';
}
return 0;
}
MC0126子集统计
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char a[20],b[20];
scanf("%s%s", a, b);
int n = strlen(a);
int ans = 1;
for (int i =0;i<n;i++)
{
if(a[i]=='1' && b[i]=='0')
ans*=2;
if(a[i]=='0' && b[i]=='1')
ans =0;
}
cout << ans <<endl;
return 0;
}
也就是说,能够改变满足条件c的数量,只有a=1,b=0的时候,存在两种可能,a=0,b=1则导致c不存在,其余不改变c的数量。
MC0127距离计算
#include<bits/stdc++.h>
using namespace std;
int a[5001];
int sgn(int i, int j){
int flag;
if(a[i]-a[j]>0)
flag = 1;
if(a[i]-a[j]==0)
flag = 0;
if(a[i]-a[j]<0)
flag = -1;
return flag* abs(i-j);
}
int main( )
{
int n;
cin >> n;
for(int i=1;i<=n;i++)
cin >> a[i];
int sum=0;
for (int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
sum +=sgn(i,j);
cout << sum;
return 0;
}
MC0128老式计算器
#include<bits/stdc++.h>
using namespace std;
int calc(int n, int k){
if(n == 0) return 0;
if(n % k == 0) return calc(n/k,k)+1;
return calc(n - n % k, k) + n % k;
}
int main( )
{
int n,k;
cin >> n >> k;
if(k==1)
cout << n << endl;
else
cout <<calc(n,k) <<endl;
return 0;
}
calc采用递归的方式,直至n=0,才算结束。
MC0129序列
#include<bits/stdc++.h>
using namespace std;
int calc(int n,int k){
if(n==1)
return 1;\
int a =1, b = pow(3,n-2), c = b+1, d= 2*b, e = d+1,
f = pow(3,n-1);
if(k>=a && k<=b) return calc(n-1,k);
if(k>=c && k<=d) return calc(n-1,k-b)+1;
if(k>=e && k<=f) return calc(n-1,k-d);
}
int main( )
{
int n,k;
cin >> n >>k;
cout << calc(n,k) <<endl;
return 0;
}
MC0130苹果树
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,m;
cin >> n >> m;
int t = 0;
for (int i =1;i <= m;i++) {
int c = n/3;
t +=c;
n-= c;
if(c == 0)
break;
}
cout << t << endl;
return 0;
}
MC0131数数
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
cout << (1<< n) <<endl;
return 0;
}
MC0132循环位移
#include<bits/stdc++.h>
using namespace std;
const int maxn=2010;
int a[maxn];
int main( )
{
int n;
cin >> n;
for (int i =1;i<=n;i++)
cin >> a[i];
for (int i =n+1;i<=2*n;i++)
a[i]=a[i-n];
for (int i = 1;i<=n;i++){
bool flag = 1;
for (int j=i+1;j<=i+n-1;j++)
if(a[j]<a[j-1])
flag=0;
if(flag){
puts("YES");
return 0;
}
}
puts("NO");
return 0;
}