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 ...
随机推荐
- 2、html补充
今天补充几个html标签 <body>内常用标签 1.<div>和<span> <div></div> : <div>只是一个块 ...
- linux i2c 的通信函数i2c_transfer在什么情况下出现错误
问题: linux i2c 的通信函数i2c_transfer在什么情况下出现错误描述: linux i2c设备驱动 本人在写i2c设备驱动的时候使用i2c transfer函数进行通信的时候无法进行 ...
- mvn -N和-U的用法
mvn参数-N.-U理解 关于-N -N,--non-recursive Do not recurse into sub-projects 意思是,不递归到子项目(子模块). 举例: 一个父项目下Fa ...
- Gradle sync failed: /Applications/Android Studio.app/Contents/gradle/gradle-2.14.1/lib/plugins/gradle-diagnostics-2.14.1.jar (No such file or directory) Consult IDE log for more details (Help | Sh
上面出现的错误是,我从Android Studio 2.2 升级到2.3后,出现的问题, 找到方法: http://stackoverflow.com/questions/30526613/andro ...
- gitbook安装与使用,并使用docker部署
本文简单介绍如何安装并使用gitbook,最后如何使用docker构建书籍镜像. 1. 前置条件 需要Nodejs环境,安装npm,国内用户再安装cnpm npm install -g cnpm -- ...
- shell编程学习笔记(八):Shell中的if条件判断
编程语言中都有条件判断,shell编程也不例外,下面我们来看一下shell中应该怎么使用if条件判断 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts ...
- uc浏览器视频缓存合并工具
1.该软件用于将uc浏览器中零散的视频缓存切片处理成完整的视频文件. 开发语言:C#开发工具: Visual Studio 2017 Community 实例图示: 程序代码下载地址 windows ...
- 哪些 Python 库让你相见恨晚?【转】
原文链接:https://www.zhihu.com/question/24590883/answer/92420471 原文链接:Python 资源大全 ---------------- 这又是一个 ...
- tensorflow 批次读取文件内的数据,并将顺序随机化处理. --[python]
使用tensorflow批次的读取预处理之后的文本数据,并将其分为一个迭代器批次: 比如此刻,我有一个处理之后的数据包: data.csv shape =(8,10),其中这个结构中,前五个列为fe ...
- notepad++ 复制代码--高亮 - 带颜色
思路来源:http://blog.csdn.net/super828/article/details/72826024 选择代码,然后右键选择菜单命令