CodeForces Round #639 div2 前三题

Posted bethebestone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces Round #639 div2 前三题相关的知识,希望对你有一定的参考价值。

------------恢复内容开始------------

A - Puzzle Pieces

解题思路:这题就只有n或者m为1;或者n=2,m=2的时候才能够达成题目的目标。所以将这两个特判一下,其他的直接输出NO就行了

 1 //#include<bits/stdc++.h>
 2 #include <iostream>
 3 #include <cstdlib>
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <string>
 7 #include <algorithm>
 8 #include <cmath>
 9 #include <queue>
10 #define mem(a) memset(a,0,sizeof(a))
11 #define forn(i,n) for(int i=0;i<n;++i)
12 #define for1(i,n) for(int i=1;i<=n;++i)
13 #define IO std::ios::sync_with_stdio(false); std::cin.tie(0)
14 #define ll long long
15 #define inf 0x3f3f3f3f
16 #define lowbit(x) x&(-x)
17 using namespace std;
18 const int maxn=1e6+5;
19 int n,a,b,c,k,u,t,m;
20 
21 
22 int main()
23 {
24     IO;
25     cin>>t;
26     while(t--)
27     {
28         cin>>n>>m;
29         if(n==1||m==1||(n==2&&m==2))
30             cout<<"YES"<<endl;
31         else
32             cout<<"NO"<<endl;
33     }
34     return 0;
35 }

 

B - Card Constructions

解题思路:

这一题先是考虑着打表查找,但是思考了一下觉得这样查找就成了大问题。所以,从表到数据是不行的,那就只有从数据出发来找和他最近的那个数的关系了。

于是我们能够列出方程 (3n+n) / 2 <= x 可利用一下求根公式来进行求解得到  n = (-1 + sqrt(24x+1)) / 6;   又因为题目中的x的范围1e9,所以我们计算的时候要注意24倍要用long long类型

我们每次算出来最近的那个数就用x减去它,直到无法找到这个数(也就是n=0)的时候,程序结束,输出答案

 

代码如下:

 1 //#include<bits/stdc++.h>
 2 #include <iostream>
 3 #include <cstdlib>
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <string>
 7 #include <algorithm>
 8 #include <cmath>
 9 #include <queue>
10 #define mem(a) memset(a,0,sizeof(a))
11 #define forn(i,n) for(int i=0;i<n;++i)
12 #define for1(i,n) for(int i=1;i<=n;++i)
13 #define IO std::ios::sync_with_stdio(false); std::cin.tie(0)
14 #define ll long long
15 #define inf 0x3f3f3f3f
16 #define lowbit(x) x&(-x)
17 using namespace std;
18 const int maxn=1e6+5;
19 ll n,x,k,u,t,m;
20 int num[maxn];
21 
22 void init()
23 {
24     int tmp,tot;
25     tot=0;
26     for(int i=1;i<100;++i)
27     {
28         tot+=i;
29         num[i]=3*tot-i;
30         cout<<num[i]<<endl;
31     }
32 }
33 
34 int main()
35 {
36     IO;
37     cin>>t;
38     while(t--)
39     {
40         int ans=0;
41         cin>>x;
42         while(1)
43         {
44             n=(sqrt(24*x+1)-1)/6;
45             if(!n) break;
46             u=(3*n+1)*n/2;
47             x-=u;
48             ans++;
49         }
50         cout<<ans<<endl;
51     }
52     return 0;
53 }

 

C - Hilbert‘s Hotel

解题思路:这一题就是让你把一段数轴上的数按照它的规则进行移动,然后判断有没有重复的或者出界的

他的规则是对于 i 位置上的数,将其移动 到 ( i + a[ i ] ) % n 如果小于0,就加上 n,然后再用另一个数组来记录移动后的情况

判断一下有没有重复或者空缺的情况就可以了

 

代码如下:

 1 //#include<bits/stdc++.h>
 2 #include <iostream>
 3 #include <cstdlib>
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <string>
 7 #include <algorithm>
 8 #include <cmath>
 9 #include <queue>
10 #define mem(a) memset(a,0,sizeof(a))
11 #define forn(i,n) for(int i=0;i<n;++i)
12 #define for1(i,n) for(int i=1;i<=n;++i)
13 #define IO std::ios::sync_with_stdio(false); std::cin.tie(0)
14 #define ll long long
15 #define inf 0x3f3f3f3f
16 #define lowbit(x) x&(-x)
17 using namespace std;
18 const int maxn=1e6+5;
19 ll n,x,k,u,t,m;
20 int a[maxn];
21 int b[maxn];
22 
23 
24 int main()
25 {
26     IO;
27     cin>>t;
28     while(t--)
29     {
30         bool flag=false;
31         cin>>n;
32         forn(i,n)
33         {
34             cin>>a[i];
35             b[i]=0;
36         }
37         forn(i,n)
38         {
39             k=(i+a[i])%n;
40             if(k<0) k+=n;
41             b[k]++;
42         }
43         forn(i,n)
44         {
45             if(b[i]==0||b[i]>1)
46                 flag=true;
47         }
48         if(flag)
49             cout<<"NO"<<endl;
50         else
51             cout<<"YES"<<endl;
52     }
53     return 0;
54 }

 

 

 
 
 

------------恢复内容结束------------

以上是关于CodeForces Round #639 div2 前三题的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #639 (Div. 2) 补题

Codeforces Round #639 (Div. 2) 补题

Codeforces Round #639 (Div. 2)

Codeforces Round #639 (Div. 2)

Codeforces Round #639 (Div. 2) A~D

Codeforces Round #639 (Div. 2) A~D