gym 101755
别问我为什么现在才发。。。
我怎么睡醒午觉吃了个饭就晚上九点半了啊?????
真实自闭场,感觉码力严重不足需要补魔。
A:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll s,g;
int main(){
ios::sync_with_stdio(false);
cin>>s>>g;
if(s%g!=){
cout<<-;
}else if(s==g){
cout<<-;
} else{
ll tmp = s/g;
cout<<g<<' '<<(tmp-)*g;
}
}
B:显然最小的三角形两条边相邻,扫一遍就完了。
#include <bits/stdc++.h>
using namespace std;
typedef double db;
typedef long long ll;
const db eps = 1e-;
const db pi = acos(-);
int sign(db k){
if (k>eps) return ; else if (k<-eps) return -; return ;
}
int cmp(db k1,db k2){return sign(k1-k2);}
struct point {
ll x,y;
point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}
};
ll cross(point k1,point k2){return k1.x*k2.y-k1.y*k2.x;}
int n;
point p[];
int main(){
ios::sync_with_stdio(false);
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%lld%lld",&p[i].x,&p[i].y);
}
ll ans = 4e18;
for(int i=;i<n;i++){
ll tmp = cross(p[i]-p[(i+)%n],p[(i+)%n]-p[(i+)%n]);
ans=min(ans,abs(tmp));
}
printf("%lld\n",ans);
}
C:贪心选最晚的时刻就完了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Node{
int a,b;
}node[];
bool cmp(Node x,Node y){
return x.b<y.b;
}
int n;
vector<int> ans;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d",&node[i].a,&node[i].b);
}
sort(node+,node++n,cmp);
int now;
for(int l=,r;l<=n;l=r+){
now = node[l].b;r=l;
ans.push_back(now);
while (r<n&&node[r+].a<=now){
r++;
}
}
int t = ans.size();
printf("%d\n",t);
for(auto u:ans){
printf("%d ",u);
}
}
D:
E:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
string s,t;
bool slove(int l,int r){
while (l<=r){
if(s[l]==t[r]&&s[r]==t[l]){
} else {
return false;
}
l++,r--;
}
return true;
}
int main(){
ios::sync_with_stdio(false);
cin>>s>>t;
if(s==t){
cout<<"YES"<<endl;
exit();
}
int l=-,r=-;
for(int i=;i<s.length();i++){
if(s[i]!=t[i]) {
l=i;
break;
}
}
for(int i=s.length()-;i>=;i--){
if(s[i]!=t[i]){
r=i;
break;
}
}
if(slove(l,r))
cout<<"YES";
else
cout<<"NO";
}
/**
adcba
adabc
*/
F:wa自闭了。。一直wa48。。这个题显然我们可以用一种类似拓扑排序的方式搞。
但是在中间过程要记录一下当前节点的父节点来check,
可以看一下这位大神的题解 https://blog.csdn.net/v5zsq/article/details/80156734
一是建完图以后看一下是否连的边在原图中都存在。
二是在中间更新父节点的时候,新更新的父节点肯定在之前的父节点(祖先)里。
有点含糊不清。fa其实就是从祖先不断更新一直更新到父节点的这个过程。
#include <bits/stdc++.h>
#define pii pair<int,int>
#define mk(a,b) make_pair(a,b)
using namespace std;
typedef long long ll;
int n,c,a;
int g[][];
int deg[],fa[];
vector<int> v[];
vector<pii>ans;
void gg() { cout << "NO";exit(); }
int main(){
ios::sync_with_stdio(false);
memset(fa,-, sizeof(fa));
cin>>n;
for(int i=;i<=n;i++){
cin>>c;
while (c--){
cin>>a;
g[i][a]=;
v[i].push_back(a);
deg[a]++;
}
}
queue<int> q;
for(int i=;i<=n;i++)
if(deg[i]==)q.push(i);
if(q.size()!=)gg();
int rt=q.front();
while (!q.empty()){
int x = q.front();
q.pop();
for(auto u:v[x]){
deg[u]--;
if(fa[u]!=-&&!g[fa[u]][x]){//新的祖先必然要以之前的祖先为祖先
gg();
}
fa[u]=x;
if(deg[u]==){
q.push(u);
ans.push_back(mk(x,u));
}
}
}
for(int i=;i<=n;i++){
if(i==rt)continue;
for(auto u:v[i]){
if(!g[fa[i]][u])gg();
}
}
if(ans.size()==n-){
cout<<"YES"<<endl;
for(auto tmp:ans){
cout<<tmp.first<<' '<<tmp.second<<endl;
}
} else {
gg();
}
}
H:bfs。要注意的是判断能不能走的时候每个点被更新的次数是很少的所以不会T。
看到有大神说至多两次。。。不太清楚。。。
#include <bits/stdc++.h>
#define pii pair<int,int>
#define mk(a,b) make_pair(a,b)
using namespace std;
typedef long long ll;
const int N = 2e5+;
int n,m,d;
bool in(int x,int y){
return x>=&&y>=&&x<=n&&y<=m;
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m>>d;
char s[n+][m+];
int vis[n+][m+];
int val[n+][m+];
memset(vis,, sizeof(vis));
memset(val,, sizeof(val));
queue<pii> q;
pii u,v;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++) {
cin >> s[i][j];
if(s[i][j]=='S') u=mk(i,j);
else if(s[i][j]=='F') v=mk(i,j);
else if(s[i][j]=='M') {
q.push(mk(i,j));vis[i][j]=;
}
}
}
while (!q.empty()){
int x = q.front().first,y=q.front().second;
q.pop();
if(in(x-,y)&&!vis[x-][y]&&val[x][y]<d){
vis[x-][y]=;
val[x-][y]=val[x][y]+;
q.push(mk(x-,y));
}
if(in(x+,y)&&!vis[x+][y]&&val[x][y]<d){
vis[x+][y]=;
val[x+][y]=val[x][y]+;
q.push(mk(x+,y));
}
if(in(x,y-)&&!vis[x][y-]&&val[x][y]<d){
vis[x][y-]=;
val[x][y-]=val[x][y]+;
q.push(mk(x,y-));
}
if(in(x,y+)&&!vis[x][y+]&&val[x][y]<d){
vis[x][y+]=;
val[x][y+]=val[x][y]+;
q.push(mk(x,y+));
}
}
if(vis[u.first][u.second]){
return *printf("-1\n");
}
while (!q.empty()) q.pop();
q.push(u);
memset(val,, sizeof(val));
while (!q.empty()){
int x=q.front().first,y=q.front().second;
q.pop();
if(in(x,y+)&&!val[x][y+]&&!vis[x][y+]){
val[x][y+]=val[x][y]+;
q.push(mk(x,y+));
}
if(in(x,y-)&&!val[x][y-]&&!vis[x][y-]){
val[x][y-]=val[x][y]+;
q.push(mk(x,y-));
}
if(in(x+,y)&&!val[x+][y]&&!vis[x+][y]){
val[x+][y]=val[x][y]+;
q.push(mk(x+,y));
}
if(in(x-,y)&&!val[x-][y]&&!vis[x-][y]){
val[x-][y]=val[x][y]+;
q.push(mk(x-,y));
}
}
if(val[v.first][v.second])
printf("%d\n",val[v.first][v.second]);
else
printf("-1\n");
}
J:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int n,x,a[N];
int main(){
ios::sync_with_stdio(false);
cin>>n;
for(int i=;i<=n;i++){
cin>>x;a[x]++;
}
int ans = ;
for(int i=;i<=;i++){
ans+=a[i]/;
}
ans/=;
cout<<ans<<endl;
}
K:显然二分,然后我们贪心的选就可以了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
int a[];
int check(int x){
int res=;
for(int i=;i<=n;i++){
if(a[i]<=res){
res++;
} else if(a[i]>res&&x>){
x--;
res++;
}
}
return res;
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=n;i++){
cin>>a[i];
}
int l=,r=n,ans=m;
while (l<=r){
int mid = l+r>>;
if(check(mid)>=m){
r=mid-;
ans=mid;
} else{
l=mid+;
}
}
cout<<ans;
}
L:严重码力不足,,其实挺好想的,我们维护s串第i个位置下一个j字母的位置就可以了。
但是当时没写。。。貌似在专心自闭F。。。
#include <bits/stdc++.h>
using namespace std;
const int N = ;
int nxt[N][],pos[],q;
char s[N],op[];
int ans[N];
int main(){
scanf("%s",s+);
int n = strlen(s+);
memset(nxt,-, sizeof(nxt));
memset(pos,-, sizeof(pos));
for(int i=n;i>=;i--){
for(int j=;j<;j++)
nxt[i][j]=pos[j];
pos[s[i]-'a']=i;
}
scanf("%d",&q);
int m=,len=;
while (q--){
scanf("%s",op);
if(op[]=='o'){//
m--;len=min(len,m);
} else{
scanf("%s",op);
if(ans[m]!=-&&nxt[ans[m]][op[]-'a']!=-) {
ans[m+]=nxt[ans[m]][op[]-'a'];
m++;len++;
} else{
ans[++m]=-;
}
}
if(len==m)printf("YES\n");
else printf("NO\n");
}
}
/**
abcabc
4
push a
push a
push a
push a
*/
M:
还是上面那个大神的 https://blog.csdn.net/v5zsq/article/details/80168485
这种小模拟思路清晰非常重要,然后我当时大概神志不清??反正就是不想写(雾
#include <bits/stdc++.h>
using namespace std;
string a,b,c;int n;
vector<int> v;
bool check(){
int num=;
for(int i=;i<n;i++){
if(b[i]!=a[i])num++;
if(num>)return ;
}
num=;
for(int i=;i<n;i++){
if(c[i]!=a[i])num++;
if(num>)return ;
}
return ;
}
int main(){
ios::sync_with_stdio(false);
cin>>a>>b>>c;n=a.length();
for(int i=;i<n;i++){
if(a[i]!=b[i]||a[i]!=c[i])v.push_back(i);
}
if(v.size()>){
cout<<"Impossible"<<endl;
return ;
}
if(v.size()==){
cout<<"Ambiguous"<<endl;
return ;
}
int ans = ;
int pos,x;
if (check()){
ans++;
x=a[];pos=;
}
bool f=;
for(auto id:v){
char tmp = a[id];
for(int i=;i<;i++){
if(tmp==char('a'+i))continue;
a[id]=char('a'+i);
if(check()){
ans++;pos=id,x=char('a'+i);
//cout<<id<<' '<<char('a'+i)<<endl;
}
}
a[id]=tmp;
} if(ans==){
cout<<"Impossible\n";
} else if(ans>){
cout<<"Ambiguous"<<endl;
} else{
a[pos]=x;
cout<<a;
}
}
为什么好友单切全都9题10题啊?我才6题啊好尴尬啊。。。
gym 101755的更多相关文章
- GYM 101755 K.Video Reviews 【贪心】+【二分】
<题目链接> 题目大意: 一家公司想让n个人给他们的产品评论,所以依次去找这n个人,第i个人会评论当且仅当已经有ai个人评论或他确实对这个产品感兴趣,但是这n个人都不对这个产品感兴趣,问这 ...
- Video Reviews
题目链接:http://codeforces.com/gym/101755/problem/K 题目理解: 一家公司想让n个人给他们的产品评论,所以依次去找这n个人,第i个人会评论当且仅当已经有ai个 ...
- Safe Path(bfs+一维数组存图)
题目链接:http://codeforces.com/gym/101755/problem/H 题目分析:先bfs一遍怪兽可以到达的点,再bfs人可以走的地方看可不可以到达终点: 很显然读到 2&l ...
- ACM: Gym 101047M Removing coins in Kem Kadrãn - 暴力
Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS Memory Limit:65536KB 64bit IO Fo ...
- ACM: Gym 101047K Training with Phuket's larvae - 思维题
Gym 101047K Training with Phuket's larvae Time Limit:2000MS Memory Limit:65536KB 64bit IO F ...
- ACM: Gym 101047E Escape from Ayutthaya - BFS
Gym 101047E Escape from Ayutthaya Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I6 ...
- ACM: Gym 101047B Renzo and the palindromic decoration - 手速题
Gym 101047B Renzo and the palindromic decoration Time Limit:2000MS Memory Limit:65536KB 64 ...
- Gym 101102J---Divisible Numbers(反推技巧题)
题目链接 http://codeforces.com/gym/101102/problem/J Description standard input/output You are given an a ...
- Gym 100917J---Judgement(01背包+bitset)
题目链接 http://codeforces.com/gym/100917/problem/J Description standard input/outputStatements The jury ...
随机推荐
- 如何在MyBatis中优雅的使用枚举
问题 在编码过程中,经常会遇到用某个数值来表示某种状态.类型或者阶段的情况,比如有这样一个枚举: public enum ComputerState { OPEN(10), //开启 CLOSE( ...
- USE " cc.exports.* = value " INSTEAD OF SET GLOBAL VARIABLE"
Cocos2d-x 3.5的lua项目生成后,变成了MVC模式,并且,加入了一个全局变量的检测功能.也就是说,你不小心用了全局变量,他会提示你出错! 比如 local temp = 1 temp = ...
- std::vector push_back报错Access violation
C/C++ code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include < ...
- WPF中,输入完密码回车提交 ,回车触发按钮点击事件
类似与winform中窗体的AcceptButton属性,在wpf中,需要将按钮的IsDefault设置为true就行.
- SpringBoot2.0微信小程序支付多次回调问题
SpringBoot2.0微信小程序支付多次回调问题 WxJava - 微信开发 Java SDK(开发工具包); 支持包括微信支付.开放平台.公众号.企业微信/企业号.小程序等微信功能的后端开发. ...
- InfluxDB源码阅读之snapshotter服务
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 服务模块介绍 源码路径: github.com/influxda ...
- 硬盘SMART检测参数详解[转]
一.SMART概述 要说Linux用户最不愿意看到的事情,莫过于在毫无警告的情况下发现硬盘崩溃了.诸如RAID的备份和存储技术可以在任何时候帮用户恢复数据,但为预防硬件崩溃造成数据丢失所 ...
- EntityFramework.Extended 对EF进行扩展
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- Django项目中自定义manage命令
挺不错的一篇文章:https://www.cnblogs.com/ajianbeyourself/p/3643304.html
- 再谈Promise
方法 构造函数 接受的参数是一个带两个Function参数的函数,实际的异步代码编写在这个函数里,成功后调用第一个参数,失败调用第二个: Promise.prototype.catch 当构造函数里调 ...