A 笔记本电脑
第一题没啥好说的了
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n;
set<int> t;
pair<int,int> arr[100009];
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++){cin>>arr[i].first>>arr[i].second;}sort(arr+1,arr+n+1);for(int i=1;i<=n;i++){if(i>1){auto it=prev(t.end());if((*it)>arr[i].second){cout<<"Happy Alex";exit(0);}}t.insert(arr[i].second);}cout<<"Poor Alex";return 0;
}
B
这道题直接模拟,加点优化,a!=a(a-1)......1
当b>a时,只用计算(a+1)*(a+2).....b
好了,看代码
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long//这道题不这样写可能会超时,亲测 nn
int a,b;
signed main()
{cin>>a>>b;int x=b/10*10;if(a<x&&b>=x)cout<<"0\n";else {int x=1;for(int i=a+1;i<=b;i++){x=x*i%10;}cout<<x<<"\n";}return 0;
}
这道题先筛掉不可能的序列,后面一个一个检查不合法的序列,给出核心代码
点击查看代码
f=0;cin>>n;for(int i=1;i<=4*n;i++){cin>>arr[i];}sort(arr+1,arr+4*n+1);int l=0;for(int i=2;i<=4*n;i+=2){if(arr[i]!=arr[i-1]){cout<<"NO\n";f=1;break;}b[++l]=arr[i];}if(f)continue;f=0;int x=b[1]*b[2*n];for(int i=1;i<=n;i++){if(b[i]*b[2*n+1-i]!=x){cout<<"NO\n";f=1;break;}}if(f)continue;cout<<"YES\n";
这道题直接分类讨论+数学方法,可以加坐标偏移,代码十分短 不给具体代码,可以从http://www.nfls.com.cn:20035/contest/1997/repeat寻找
这道题直接枚举 第一行答案直接枚举选的是哪个字母 非常简单 先枚举字符 写二重循环
两重循环里面生成8个长度为3的字符串然后check 考试时代码变量名重复了,只拿了70分
正确代码:
F题算贪心,真正题意:有n条线段,每条线段需要分成两段以上(两端也可以),最少需要切几刀 数据结构我选择set 原因:erase方便 贪心策略:每次切右端点最靠左的位置,切到的线段从set里清空,知道所有线段合法,中间使用ans统计答案
代码:
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
pair<int,int> tmp;
set<pair<int,int> > t;//如果编译器版本低set<pair<int,int>> t会报错
int main()
{cin>>n>>m;for(int i=1;i<=m;i++){cin>>tmp.second>>tmp.first;t.insert(tmp);}while(t.size()>0){tmp=(*t.begin());t.erase(t.begin());ans++;for(auto it=t.begin();it!=t.end();){pair<int,int> p2=(*it);if(p2.second<tmp.first){auto it2=it;it++;t.erase(it2);continue;}it++;}}cout<<ans<<"\n";return 0;
}
直接看样例揣摩,如何构造,因该是规律题,只需要构造l,r里的数,其他随便
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,a,b,c,x[505];
int visited[1025];
int main()
{int T;cin>>T;while(T--){memset(visited,0,sizeof(visited));cin>>n>>a>>b>>c;int l=b-a+1;int mn=0,mx=0;for(int i=1;i<=l;i++)mn+=i,x[i]=i;for(int i=n;i>n-l;i--)mx+=i;if(c<mn||c>mx){cout<<"-1\n";continue;}int p=l;while(c>mn){x[p]++;if(x[p]==(n-(l-p)))p--;mn++;}for(int i=1;i<=l;i++){visited[x[i]]=1;}int tmp=1;for(int i=1;i<=n;i++){if(i==a){for(int j=1;j<=l;j++)cout<<x[j]<<" ";i=b;}else{while(visited[tmp])tmp++;cout<<tmp<<" ";visited[tmp]=1;}}cout<<"\n";}return 0;
}