奖学金
P1093 [NOIP2007 普及组] 奖学金 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct stud{
int id,chinese,sum;
}a[310];
bool cmp(stud a,stud b){ //不是a.sum 地址
if(a.sum>b.sum) return true;
else if(a.sum==b.sum
&&a.chinese>b.chinese)return true;
else if(a.sum==b.sum
&&a.chinese==b.chinese
&&a.id<b.id)return true; // < 警告,小号在上(sort里大)
else
return false;
}
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int N,math,eng;
cin>>N;
for(int i=0;i<N;i++){
cin>>a[i].chinese>>math>>eng;
a[i].sum=a[i].chinese+math+eng; //没必要math,eng也加入结构体
a[i].id=i+1;
}
sort(a,a+N,cmp); //没事,标一下
for(int i=0;i<5;i++){
cout<<a[i].id<<" "<<a[i].sum<<'\n';
}
return 0;
}
宇宙总统
P1781 宇宙总统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
和上面题差不多,用到了高精度(不愧是宇宙总统,有100位数票)
主函数简简单单,重要的是结构体&比较函数
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct node{
string x;
int num;
}a[210];
bool cmp(node a,node b){
if(a.x.length()!=b.x.length())
return a.x.length()>b.x.length();//还能这么写,类似判断大小?
return a.x>b.x;
}
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int N;
cin>>N;
for(int i=0;i<N;i++){
cin>>a[i].x;
a[i].num=i+1;
}
sort(a,a+N,cmp); //没事,还是标一下
cout<<a[0].num<<"\n"<<a[0].x;
return 0;
}
统计方形
tP2241 统计方形(数据加强版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P2241
看题解吧(题解 P2241 【统计方形(数据加强版)】 - 原株龙葵的博客 - 洛谷博客 (luogu.com.cn)
首先,统计一个n*m的矩形里有多少个正方形,长方形。
要明确,正方形和长方形都是矩形,那么n*m的矩形里的
矩形数=正方形数+长方形数
明确这一点后,就可以一次求出二者了
如图,长为2宽为1的小长方形用〇来表示,那么
横向排列的就有 *(n-1)m 个
竖向排列的就有 n(m-1)* 个
证明:
∵ 矩形长不等于宽 ∴ 子矩形构成的矩阵的长宽是由原矩形长宽减去不同数而得 即(n-b)*(m-a) (a≠b)
如图,用 · 表示长宽均为二的正方形
即有(n-1)*(m-1)个小正方形
证明:
∵正方形长等于宽 ∴子正方形构成的矩阵的长宽由原矩形长宽减去相同数而得 即(n-b)*(m-a) (a=b)
(n-b)*(m-a) (a=b)
上代码!(最短)
#include<iostream> using namespace std; long long n,m,rec,sqr; int main() { cin>>n>>m; for(int i=0; i<n; i++)//循环,从n-0到n-(n-1) for(int j=0; j<m; j++) {//循环,从m-0到m-(m-1) if(i==j) sqr+=(n-i)*(m-j);//如果i==j,说明是正方形 else rec+=(n-i)*(m-j);//如果不等说明是矩形 } cout<<sqr<<" "<<rec<<endl;//输出 return 0; }