只会前6.。。。。。。。。。后面太难顶了。。。。。。。。。。。。
A:
四个数分两组使得差就小,肯定就是先排序然后一个小的一个大的拎出来,然后中间的拎出来,相减一下就行了。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int maxn = 1e5 + 10;
void solved(){
int a[5];
cin>>a[1]>>a[2]>>a[3]>>a[4];
sort(a + 1, a + 5);
cout<<abs((a[1] + a[4]) - (a[2] + a[3]))<<endl;
}
int main(){
solved();
return 0;
}B:
就按照题目要求搞呗,第一第二关键字降序,第三关键字升序,然后输出就行了。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int maxn = 1e5 + 10;
struct node{
ll date,no;
double tem;
node(){}
node(ll a,ll b,double c):date(a),no(b),tem(c){}
}a[maxn];
bool cmp(node a,node b){
if(a.date != b.date )return a.date > b.date;
else if(a.tem != b.tem)return a.tem > b.tem;
else return a.no < b.no;
}
void solved(){
int n;cin>>n;
int cnt = 0;
for(int i = 1; i <= n; i++){
ll x,y;double z;cin>>x>>y>>z;
if(z >= 38.0)
a[cnt++] = {x,y,z};
}
sort(a,a + cnt,cmp);
cout<<cnt<<endl;
for(int i = 0; i < cnt; i++){
printf("%lld %lld %.1lf\n",a[i].date,a[i].no,a[i].tem);
}
}
int main(){
solved();
return 0;
}C:
一开始想复杂了,想着把所有的子序列全部切割出来,然后从最大的开始比较,不同就直接返回答案就行了,。。。。子序列切割不太会写。。。。后来发现,只要某个序列有一个字符和另外一个不同,那么他们两个的最大长度一定不是另外一个序列的子串,否则就是-1,这样想就直接输出两个串的最大长度就行了。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int maxn = 1e4 + 10;
char s1[maxn],s2[maxn];
void solved(){
string s1,s2;
cin>>s1>>s2;
if(s1 == s2)cout<<"-1"<<endl;
else cout<<max(s1.size(),s2.size())<<endl;
}
int main(){
solved();
return 0;
}D:
一开始题意看错了,,,浪费好多时间,0和1的地位是相等的,只要
00
010
0110
不断在两个0中间插入1这样就可以得到满足条件的所有长度串了。
需要特判一下n == 2
代码
#include<bits/stdc++.h>
using namespace std;
void solved(){
int n;cin>>n;
if(n == 1){
cout<<"1"<<endl;
cout<<"1"<<endl;
return ;
}
if(n == 2){
cout<<2<<endl;
cout<<"0"<<endl;
cout<<"11"<<endl;return ;
}
cout<<n - 1<<endl;
cout<<"00"<<endl;
for(int k = 3;k <= n; k++){
for(int i = 1; i <= k; i++){
if(i == 1 || i == k)cout<<"0";
else cout<<"1";
}
cout<<endl;
}
}
int main(){
solved();
return 0;
} E:
直接贪心选择每次吃美味程度最多的就行,排序一下,因为每吃一个后面的美味程度全部-1,从cnt来计算每次吃完后后面美味程度减少多少。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int maxn = 1e5 + 10;
ll a[maxn];
bool cmp(ll a,ll b){
return a > b;
}
void solved(){
int n;cin>>n;
for(int i = 1; i <= n; i++)cin>>a[i];
sort(a + 1, a + 1 + n,cmp);
ll ans = 0;
ll cnt = 0;
for(int i = 1; i <= n; i++){
ans += a[i] - cnt;
cnt ++;
}
cout<<ans<<endl;
}
int main(){
solved();
return 0;
}F:
打表 一下,然后特判一下就好了。。。。。
代码
#include<bits/stdc++.h>
using namespace std;
int table1[102] = {14,
13,12,11,9,8,14,13,11,10,9,
8,13,12,11,10,8,14,13,12,10,
9,8,14,12,11,10,9,14,13,12,
11,9,8,14,13,11,10,9,8,13,
12,11,10,8,14,13,12,10,9,8,
14,12,11,10,9,14,13,12,11,9,
8,14,13,11,10,9,8,13,12,11,
10,8,14,13,12,10,9,8,14,12,
11,10,9,14,13,12,11,9,8,14,
13,11,10,9,8,13,12,11,10,9
};
int table2[102] ={18 ,17, 16, 15, 20, 19, 18, 17, 15, 21,
20, 19, 17, 16, 15, 21, 19, 18, 17, 16,
21, 20, 19, 18, 16, 15, 21, 20, 18, 17,
16, 15, 20, 19, 18, 17, 15, 21, 20, 19,
17, 16, 15, 21, 19, 18, 17, 16, 21, 20,
19, 18, 16, 15, 21, 20, 18, 17, 16, 15,
20, 19, 18, 17, 15, 21, 20, 19, 17, 16,
15, 21, 19, 18, 17, 16, 21, 20, 19, 18,
16, 15, 21, 20, 18, 17, 16, 15, 20, 19,
18, 17, 15, 21, 20, 19, 17, 16, 15, 21,
20, 19} ;
void solved(){
int t;
for(scanf("%d",&t);t;t--){
int y,m,d;cin>>y>>m>>d;
int year = y;
y -= 2000;
if(m < 5){
cout<<"Mother's Day: May "<<table1[y]<<"th, "<<year<<endl;
}else if(m == 5){
if(d < table1[y]){
cout<<"Mother's Day: May "<<table1[y]<<"th, "<<year<<endl;
}else {
if(table2[y] == 21)
cout<<"Father's Day: June "<<table2[y]<<"st, "<<year<<endl;
else
cout<<"Father's Day: June "<<table2[y]<<"th, "<<year<<endl;
}
}else if(m == 6){
if(d < table2[y]){
if(table2[y] == 21)
cout<<"Father's Day: June "<<table2[y]<<"st, "<<year<<endl;
else
cout<<"Father's Day: June "<<table2[y]<<"th, "<<year<<endl;
}else {
cout<<"Mother's Day: May "<<table1[y + 1]<<"th, "<<year + 1<<endl;
}
}
else if(m > 6)cout<<"Mother's Day: May "<<table1[y + 1]<<"th, "<<year + 1<<endl;
}
}
int main(){
solved();
return 0;
} 
京公网安备 11010502036488号