首页 > 其他分享 >双周赛2

双周赛2

时间:2022-12-05 20:59:54浏览次数:56  
标签:std 10 string int 双周 st dir

输出全排列

签到题,不解释

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=15;
 4 int path[N];
 5 int n;
 6 bool st[N];
 7 void dfs(int u)
 8 {
 9     if(u>n)
10     {
11         for(int i=1;i<=n;i++)
12         {
13             cout<<path[i];
14         }
15         cout<<endl;
16     }
17     for(int i=1;i<=n;i++)
18     {
19         if(!st[i])
20         {
21             st[i]=1;
22             path[u]=i;
23             dfs(u+1);
24             st[i]=0;
25         }
26     }
27     
28 }
29 int main()
30 {
31     cin>>n;
32     dfs(1);
33     return 0;
34 }

题目链接:题目详情 - 7-2 山 (pintia.cn)

连通块染色法,和洛谷扫雷那道题比较相似,扫雷链接:P4961 小埋与扫雷 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,m;
 4 const int N=2010;
 5 int p[N][N];
 6 int ans;
 7 bool st[N][N];
 8 int dx[]={1,0,-1,0},dy[]={0,-1,0,1};
 9 void dfs(int x,int y)
10 {
11     if(p[x][y]==1)
12     {
13         if(st[x][y]==0&&(st[x+dx[0]][y+dy[0]]==0&&st[x+dx[1]][y+dy[1]]==0&&st[x+dx[2]][y+dy[2]]==0&&st[x+dx[3]][y+dy[3]]==0))ans++;
14         st[x][y]=1;
15         for(int i=0;i<4;i++)
16         {
17             int xx=x+dx[i],yy=y+dy[i];
18             if(!st[xx][yy]&&p[xx][yy]==1&&xx>=1&&xx<=m&&yy>=1&&yy<=n)
19             {
20                 dfs(xx,yy);
21             }
22         }
23     }
24 }
25 int main()
26 {
27     cin>>m>>n;
28     for(int i=1;i<=m;i++)
29         for(int j=1;j<=n;j++)
30             cin>>p[i][j];
31     for(int i=1;i<=m;i++)
32         for(int j=1;j<=n;j++)
33             dfs(i,j);//染色
34     cout<<ans;
35 }

跳跃

题目链接:题目详情 - 7-3 跳跃 (pintia.cn)

因为要是找到直接输出True,100次经过某个坐标还没有找到那说明陷入了某种死循环,肯定没有找到,此时输出False

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,st;
 4 const int N=1e5+10;
 5 int a[N];
 6 int cnt[N];
 7 bool flag=0;
 8 bool flag2=0;
 9 void dfs(int x)
10 {
11     if(flag==1)return;
12     if(flag2==1)return;
13     cnt[x]++;
14     if(cnt[x]==100)
15     {
16         cout<<"False";
17         flag2=1;
18         return;
19     }
20     if(a[x]==0)
21     {
22         cout<<"True";
23         flag=1;
24         return;
25     }
26     for(int i=0;i<n;i++)
27     {
28         int up=x+a[x],down=x-a[x];
29         if(up>=0&&up<n)dfs(up);
30         if(down>=0&&down<n)dfs(down);
31     }
32 }
33 int main()
34 {
35     cin>>n;
36     for(int i=0;i<n;i++)cin>>a[i];
37     cin>>st;
38     dfs(st);
39     return 0;
40 }

回文数文回

既用到了string s(str, stridx, strlen) ; // 将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值

也用到了C++之to_string。  功能:将数字常量转化为字符串  返回值:转换好的字符串

举例
 1 #include <iostream>   // std::cout
 2 #include <string>     // std::string, std::to_string
 3 using namespace std ;
 4  
 5 int main()
 6 {
 7     std::string pi = "pi is " + std::to_string(3.1415926);
 8     std::string perfect = std::to_string(1 + 2 + 4 + 7 + 14) + " thshis a perfect number";
 9     std::cout << pi << '\n';
10     std::cout << perfect << '\n';
11     
12     system("pause");
13  
14  
15 }

输出:

 

我们可以采用构造回文数的方法,且很容易知道题中回文数的数量最多就9*10*10*10*10个,因为选定前五个就可以确定后面的四个了,简而言之就是每1w至少有一个回文数,但是还是需要注意一点是有可能还未满1w,但是例如123454321和123454322一样他们就不止有12345个回文,而是有12345+1个

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main() {
 4     int a, ans = 0;
 5     cin >> a;
 6     string check = to_string(a);
 7     string A(check, 0, 4), B(check, 5, 8);
 8     reverse(A.begin(), A.end());
 9     if (A <= B)ans++;
10     ans += a / 10000 - 10000;
11     cout << ans;
12     return 0;
13 }

最长光路

这个主要难点是如何确定回环,单纯用二维坐标是不行的,所以我们可以尝试一下再加一维用来判断方向用vis[x][y][dir]就行了

 

 

 1 /*思路:有一个check,一个vis[x][y][to],再dfs且不需要回溯,如果形成回环则相当于下一个是被标记的1*/
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int N, M, sx, sy, len, ans; char dirction;
 5 const int mx = 0x3ffffff;
 6 char mp[505][505];//也可以用一个string来储存
 7 char to[4] = {'U','R','D','L'};
 8 pair<int, int >way[4] = { {-1,0},{0,1},{1,0},{0,-1} };//这个地方很细节注意这个坐标系是以下方为x轴正方向,右方向为y轴正方向
 9 bool vis[505][505][4];//前俩个表示x,y坐标,最后一个用来表示方向
10 bool check(int x, int y) {
11     if (x<1 || y<1 || x>N || y>M || mp[x][y] == 'C')return false;
12     else return true;
13 }
14 void dfs(int x, int y, int dir) {
15     len++;
16     if (vis[x][y][dir]) {//表明形成了环状则
17         len = mx;
18         return;
19     }
20     else vis[x][y][dir] = true;//标记为走过
21     if (mp[x][y] == '\\') {
22         if (to[dir] == 'U')dir = 3;
23         else if (to[dir] == 'R')dir = 2;
24         else if (to[dir] == 'D')dir = 1;
25         else if (to[dir] == 'L')dir = 0;
26     }
27     if (mp[x][y] == '/') {
28         if (to[dir] == 'U')dir = 1;
29         else if (to[dir] == 'R')dir = 0;
30         else if (to[dir] == 'D')dir = 3;
31         else if (to[dir] == 'L')dir = 2;
32     }
33     if (!check(x + way[dir].first, y + way[dir].second))return;
34     dfs(x + way[dir].first, y + way[dir].second, dir);
35     
36 }
37 int main(){
38     cin >> N >> M;
39     for (int i = 1; i <= N; i++) {
40         for (int j = 1; j <= M; j++) {
41             cin >> mp[i][j];
42         }
43     }
44     cin >> sx >> sy;
45     for (int i = 0; i <= 3; i++) {
46         memset(vis, 0, sizeof(vis));
47         len = 0;
48         dfs(sx, sy, i);
49         if (len > ans) {
50             dirction = to[i];
51             ans = len;
52         }
53     }
54     cout << dirction << endl;
55     if (ans == mx)cout << "COOL" << endl;
56     else cout << ans << endl;
57     return 0;
58 }

 

标签:std,10,string,int,双周,st,dir
From: https://www.cnblogs.com/Zac-saodiseng/p/16953463.html

相关文章

  • KubeSphere 社区双周报 | KubeKey v3.0.2 发布 | 2022-11-24
    KubeSphere从诞生的第一天起便秉持着开源、开放的理念,并且以社区的方式成长,如今KubeSphere已经成为全球最受欢迎的开源容器平台之一。这些都离不开社区小伙伴的共同努力......
  • LeeCode 92双周赛复盘
    T1:分割圆的最少切割次数思维题:n为偶数时,可以对半切割,切割\(\frac{n}{2}\)次即可n为奇数时,不满足对称性,需要切割n次n为1时,不需要切割publicintnum......
  • 第一次双周赛
    https://pintia.cn/problem-sets/1591416544356323328/exam/problems/1591417091146764289T1只需要判断前后有没有L,在把这里涂成C最后输出即可,i=0要特判#include<bit......
  • leetcode 第90场双周赛
    6226.摧毁一系列目标题意:对于数组中每一个数nums[i],可以摧毁数组中值等于nums[i]+c*space的数(c为非负整数),求摧毁最大数量时的最小nums[i]思路:如果两个数x,y可以同时被摧......
  • KubeSphere 社区双周报 | 2022-10-28
    KubeSphere从诞生的第一天起便秉持着开源、开放的理念,并且以社区的方式成长,如今KubeSphere已经成为全球最受欢迎的开源容器平台之一。这些都离不开社区小伙伴的共同努力......
  • 89 场双周赛
    2.二的幂数组中查询范围内的乘积解法1.暴力枚举n最大是1e9,未超出int表示范围,最多有30个2的幂查询数组最大是1e5暴力枚举的最差时间复杂度就是\(3e6\),不会超时时间复......
  • # 87双周赛
    这次只做出了三道题6184.统计共同度过的日子数不熟悉api,没用过sscanf,在处理日期字符串的时候耽误了很多时间,最后用的substr()和stoi(stoi还是现场在网上搜的,哈哈哈)......
  • 灵感宝盒新增「线上云展会」产品,「直播观赏联动」等你共建丨RTE NG-Lab 双周报
    前言哈喽各位开发者,「RTENG-Lab双周报」如期而至!近两周,我们更新了一些新的实时互动场景和产品,也举办了代码实验室的第一次线下活动,与大家一起体验了声网最新的4.0SDK......