Comet OJ - 2019六一欢乐赛题解

news/2024/9/30 6:31:00/

第001话 宝可梦,就决定是你了!

等差数列求和公式

#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main() {long long n;cin >> n;cout << n*n;return 0;
}

第002话 宝可梦中心大对决!

如果两数互质连一条边,找一个点尽量多的子图,点两两间都有边。

就是最大团,可以用Bron–Kerbosch算法

#include <cstdio>
#include <iostream>
#include <algorithm>using namespace std;
/*int n,a[100],g[30][30];
int tp,s[100],ans;int dfs(int st) {for (int i = st; i <= n; i++) {bool ok = 1;for (int j = 1; j <= tp; j++) if (g[s[j]][i] != 1) {ok = 0;break;}if (ok) {s[++tp] = i;if (tp > ans) ans = tp;dfs(i+1);}}}
*/int gcd(int a,int b) {return b==0 ? a : gcd(b,a%b);
}#define N 1010  
bool flag[N], a[N][N];  
int ans, cnt[N], group[N], n, vis[N];  bool dfs( int u, int pos ){  int i, j;  for( i = u+1; i <= n; i++){  if( cnt[i]+pos <= ans ) return 0;  if( a[u][i] ){  // 与目前团中元素比较,取 Non-N(i)   for( j = 0; j < pos; j++ ) if( !a[i][ vis[j] ] ) break;   if( j == pos ){     // 若为空,则皆与 i 相邻,则此时将i加入到 最大团中   vis[pos] = i;  if( dfs( i, pos+1 ) ) return 1;      }      }  }      if( pos > ans ){  for( i = 0; i < pos; i++ )  group[i] = vis[i]; // 最大团 元素   ans = pos;  return 1;      }      return 0;  
}   
void maxclique()  
{  for (int i = 0; i <= n; i++) vis[i] = cnt[i] = group[i] = flag[i] = 0;ans=-1;  for(int i=n;i>0;i--)  {  vis[0]=i;  dfs(i,1);  cnt[i]=ans;  }  
}  void work() {cin >> n;int s[100];for (int i = 1; i <= n; i++) cin >> s[i];//sort(a+1,a+n+1);for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) {a[i][j] = (gcd(s[i],s[j])==1);//  cout<<i<<" "<<j<<" "<<a[i][j]<<"\n";}maxclique(); printf("%d\n",ans);
}int main() {int T;cin >> T;while(T--) work();return 0;
}

第003话 收服宝可梦吧!

送分

有不一样肯定第一个串放弃一位

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;char s1[2100000],s2[2100000];void work() {scanf("%s%s",s1,s2);int l1 = strlen(s1),l2 = strlen(s2);if (l1 != l2+2) {puts("0");} else {int i = 0,j = 0,t = 0;while (i <= l1 && j <= l2) {if (s1[i] == s2[j]) {i++;j++;} else {t++;i++;}}// cout<<t<<" "<<l1<<" "<<i<<" "<<j<<"\n";if (t+l1+1-i == 2) puts("1");else puts("0");}
}int main() {int T;cin >> T;while(T--) work();return 0;
}

第004话 武士少年的挑战!

送分

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;int a[100];int main() {for (int i = 1; i <= 18; i++) {int x;cin >> x;a[x]++;}int ans = 18;for (int i = 1; i <= 13; i++) if (a[i]==2 || a[i]==3) ans -= 2;else if(a[i] == 4) ans -= 4;printf("%d",ans);return 0;
}

第005话 尼比市的决斗!

恶心模拟

良心在样例把所以情况都告诉你了。

一种方位(UDLR)对应3个情况(见样例)

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;char a[100][100];
int x,y;int main() {int n;cin >> n;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) {cin >> a[i][j];if (a[i][j] == 'S') {x = i; y = j;}}char c = 'D';cout << c;int cnt = 0;bool fd = a[x][y]=='T';while (!fd) {if (c=='D') {if (a[x][y+1]!='#'&&a[x+1][y+1]!='#') {if(a[x][y+1]=='T') break;x = x+1;y = y+1;c = 'L';} else if (a[x][y+1]=='#') {c = 'R';} else if (a[x][y+1] != '#') {y = y+1;}} else if (c == 'U') {if (a[x][y-1]!='#' && a[x-1][y-1] != '#') {if(a[x][y-1]=='T') break;x = x-1;y = y-1;c = 'R';}else if (a[x][y-1] == '#') {c = 'L';} else if (a[x][y-1] != '#') {y = y-1;}} else if (c == 'R') {if (a[x-1][y]!='#' && a[x-1][y+1] != '#') {if(a[x-1][y] == 'T') break;x = x-1;y = y+1;c = 'D';}else if (a[x-1][y] == '#') {c = 'U';} else if (a[x-1][y] != '#') {x = x-1;}} else if (c == 'L') {if (a[x+1][y]!='#' && a[x+1][y-1] != '#') {if(a[x+1][y] == 'T') break;x = x+1;y = y-1;c = 'U';}else if (a[x+1][y] == '#') {c = 'D';} else if (a[x+1][y] != '#') {x = x+1;}}fd |= a[x][y] == 'T';cout << c;// << x << y<<"\n";// cnt++;if(cnt == 20) return 0;}return 0;
}

 

第006话 皮皮和月亮石!

ok[i][j]记一下以(i,j)为左上角可不可以

删一个点最多影响附近4个,ok数组可以判重。 

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;int ok[1003][1003];int main() {int n,m,q;cin >> n >> m >> q;for (int i = 1; i < n; i++)for (int j = 1; j < m; j++)ok[i][j] = 1;int sum = (n-1)*(m-1);for (int i = 1; i <= q; i++) {int x,y;cin >> x >> y;int tp = ok[x][y]+ok[x][y-1]+ok[x-1][y]+ok[x-1][y-1];ok[x][y] = ok[x][y-1] = ok[x-1][y] = ok[x-1][y-1] = 0;printf("%d\n",sum=sum-tp);}return 0;
}

第007话 华篮市的水中花!

大模拟,比赛时没做完,留坑。

第008话 通向宝可梦擂台之路!

看样例图

在左波只能降低,如果平或增加,只能落地跳到下一个右波

在右波只能增加,如果平或降低,只能通过最高点到左波

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;int a[210000];
int x,y;int main() {int n; cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];bool L = 1;int ans = 0;for (int i = 2; i <= n; i++) {if (L) {if (a[i]>=a[i-1]) {ans ++;L = 0;}} else {if (a[i] <= a[i-1]) L = 1;}}printf("%d",ans);return 0;
}

 


http://www.ppmy.cn/news/177512.html

相关文章

第003话 收服宝可梦吧!(蜜汁模拟)

继上一话皮卡丘把那几个坏人炸飞之后&#xff0c;小智确认皮卡丘已经完全恢复了。于是带着皮卡丘继续上路&#xff0c;前往尼比市去&#xff0c;小霞为了她的脚踏车的事情也一直跟着小智。 在通往尼比市的路上&#xff0c;要经过一个漆黑的常磐森林&#xff0c;小智信心满满&a…

Comet OJ - 2019六一欢乐赛C.收服宝可梦吧!

题目描述 继上一话皮卡丘把那几个坏人炸飞之后&#xff0c;小智确认皮卡丘已经完全恢复了。于是带着皮卡丘继续上路&#xff0c;前往尼比市去&#xff0c;小霞为了她的脚踏车的事情也一直跟着小智。 在通往尼比市的路上&#xff0c;要经过一个漆黑的常磐森林&#xff0c;小智…

Comet OJ-2019六一欢乐赛 C收服宝可梦吧!

本文为博主原创文章&#xff0c;未经博主允许不得转载。 题目描述 继上一话皮卡丘把那几个坏人炸飞之后&#xff0c;小智确认皮卡丘已经完全恢复了。于是带着皮卡丘继续上路&#xff0c;前往尼比市去&#xff0c;小霞为了她的脚踏车的事情也一直跟着小智。 在通往尼比市的路…

收服宝可梦吧

题目描述 继上一话皮卡丘把那几个坏人炸飞之后&#xff0c;小智确认皮卡丘已经完全恢复了。于是带着皮卡丘继续上路&#xff0c;前往尼比市去&#xff0c;小霞为了她的脚踏车的事情也一直跟着小智。 在通往尼比市的路上&#xff0c;要经过一个漆黑的常磐森林&#xff0c;小智信…

Comet OJ - 2019六一欢乐赛

这个题目我先写了些简单的 之后继续填坑&#xff1b; 比赛链接 题目链接 题目描述 小智是一名刚满十岁的男孩&#xff0c;住在真新镇中&#xff0c;他目标是成为一名优秀的宝可梦训练师&#xff0c;他明天就要从大木博士那里获得自己的第一只宝可梦了。博士在电视里建议初学者从…

找全了!一二线城市知名IT互联网公司名单(更新版)

点击▲关注 “中生代技术” 给公众号标星置顶 更多精彩技术内容 第一时间直达 接力技术&#xff0c;链接价值&#xff01;这是中生代技术社区的使命&#xff0c;经过多年的发展&#xff0c;中生代技术社区与超过100家互联网企业有了合作关系&#xff1b; 在此&#xff0c;社区…

C1027 [欢乐赛]第003话 收服宝可梦吧!

C1027 [欢乐赛]第003话 收服宝可梦吧&#xff01; 题目描述 继上一话皮卡丘把那几个坏人炸飞之后&#xff0c;小智确认皮卡丘已经完全恢复了。于是带着皮卡丘继续上路&#xff0c;前往尼比市去&#xff0c;小霞为了她的脚踏车的事情也一直跟着小智。 在通往尼比市的路上&…

cometoj——C1027 [欢乐赛]第003话 收服宝可梦吧!

题目描述 继上一话皮卡丘把那几个坏人炸飞之后&#xff0c;小智确认皮卡丘已经完全恢复了。于是带着皮卡丘继续上路&#xff0c;前往尼比市去&#xff0c;小霞为了她的脚踏车的事情也一直跟着小智。 在通往尼比市的路上&#xff0c;要经过一个漆黑的常磐森林&#xff0c;小智…