Atcoder ABC161 A~E
A - ABC Swap
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <stack> 7 #include <queue> 8 #include <vector> 9 #include <map> 10 #include <set> 11 #include <unordered_set> 12 #include <unordered_map> 13 #define ll long long 14 #define fi first 15 #define se second 16 #define pb push_back 17 #define me memset 18 const int N = 1e6 + 10; 19 const int mod = 1e9 + 7; 20 using namespace std; 21 typedef pair<int,int> PII; 22 typedef pair<long,long> PLL; 23 24 int x,y,z; 25 26 int main() { 27 ios::sync_with_stdio(false); 28 cin>>y>>z>>x; 29 printf("%d %d %d\n",x,y,z); 30 31 return 0; 32 }
B - Popular Vote
按照题目意思直接写
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <stack> 7 #include <queue> 8 #include <vector> 9 #include <map> 10 #include <set> 11 #include <unordered_set> 12 #include <unordered_map> 13 #define ll long long 14 #define fi first 15 #define se second 16 #define pb push_back 17 #define me memset 18 const int N = 1e6 + 10; 19 const int mod = 1e9 + 7; 20 using namespace std; 21 typedef pair<int,int> PII; 22 typedef pair<long,long> PLL; 23 24 int n; 25 double m; 26 double a[N]; 27 double sum=0; 28 int main() { 29 ios::sync_with_stdio(false); 30 cin>>n>>m; 31 for(int i=0;i<n;++i){ 32 cin>>a[i]; 33 sum+=a[i]; 34 } 35 sort(a,a+n); 36 37 double check=sum/(4*m); 38 int cnt=0; 39 for(int i=n-1;i>=0;--i){ 40 if(a[i]>=check) cnt++; 41 if(cnt==m){ 42 printf("Yes\n"); 43 return 0; 44 } 45 } 46 printf("No\n"); 47 48 49 return 0; 50 }
C - Replacing Integer
题意:给你两个整数x和K,每次用abs(x-K)替换x,求替换后x的最小值
题解:如果x%k==0,那么最小值就是0,否则取x除K的余数和K减其余数的最小值即可
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <stack> 7 #include <queue> 8 #include <vector> 9 #include <map> 10 #include <set> 11 #include <unordered_set> 12 #include <unordered_map> 13 #define ll long long 14 #define fi first 15 #define se second 16 #define pb push_back 17 #define me memset 18 const int N = 1e6 + 10; 19 const int mod = 1e9 + 7; 20 using namespace std; 21 typedef pair<int,int> PII; 22 typedef pair<long,long> PLL; 23 24 ll n,k; 25 26 int main() { 27 ios::sync_with_stdio(false); 28 cin>>n>>k; 29 if(n%k==0){ 30 printf("0\n"); 31 } 32 else{ 33 printf("%lld\n",min(n%k,k-(n%k))); 34 } 35 36 return 0; 37 }
D - Lunlun Number
题意:对于某个数X,如果它的每一位数的差的绝对值都<=1,那么这个数就是一个“lunlun num”,现在求第k小的“lunlun num”是多少
题解:用一个单调队列来存"lunlun num",每次取一个数,将它当前个位的数 +1,+0,-1,添加到它新的个位即可,要注意特判个位是0和9的时候,分别不能放-1和+1;
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <stack> 7 #include <queue> 8 #include <vector> 9 #include <map> 10 #include <set> 11 #include <unordered_set> 12 #include <unordered_map> 13 #define ll long long 14 #define fi first 15 #define se second 16 #define pb push_back 17 #define me memset 18 const int N = 1e6 + 10; 19 const int mod = 1e9 + 7; 20 using namespace std; 21 typedef pair<int,int> PII; 22 typedef pair<long,long> PLL; 23 24 int k; 25 ll q[N],hh=1,tt=0; 26 27 int main() { 28 ios::sync_with_stdio(false); 29 cin>>k; 30 if(k<=12){ 31 printf("%d\n",k); 32 return 0; 33 } 34 35 for(int i=1;i<=9;++i) q[++tt]=i; 36 37 int cnt=0; 38 ll ans; 39 while(cnt!=k){ 40 ll now=q[hh]; 41 hh++; 42 ll res=now%10; 43 44 if(res!=0) q[++tt]=now*10+res-1,cnt++; 45 if(cnt==k-10+1){ 46 ans=q[tt]; 47 break; 48 } 49 q[++tt]=now*10+res,cnt++; 50 if(cnt==k-10+1){ 51 ans=q[tt]; 52 break; 53 } 54 if(res!=9) q[++tt]=now*10+res+1,cnt++; 55 if(cnt==k-10+1){ 56 ans=q[tt]; 57 break; 58 } 59 } 60 printf("%lld\n",ans); 61 62 63 return 0; 64 }
E - Yutori
题意:你想在N天中工作k天,但你每工作一天就要休息c天,给你一个字符串s,只有s[i]=‘o'的时候,你才能在第i天工作,所以在哪天工作,你有多种选择,求你在这么多天中有哪几天是必须要工作的
题解:(贪心)首先从头正的遍历一边,如果能工作那么就L[x]++,这样一定能确定我们所选的工作日都是最早的,然后再反的遍历一边,如果能工作就R[x]++,得到的所有工作日一定是最晚的,那对于任意的i,如果有L[i]==R[i],这一天就一定会选.
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <stack> 7 #include <queue> 8 #include <vector> 9 #include <map> 10 #include <set> 11 #include <unordered_set> 12 #include <unordered_map> 13 #define ll long long 14 #define fi first 15 #define se second 16 #define pb push_back 17 #define me memset 18 const int N = 1e6 + 10; 19 const int mod = 1e9 + 7; 20 using namespace std; 21 typedef pair<int,int> PII; 22 typedef pair<long,long> PLL; 23 24 int n,k,c; 25 string s; 26 vector<int> L,R; 27 28 int main() { 29 ios::sync_with_stdio(false); 30 cin>>n>>k>>c>>s; 31 32 for(int i=0;i<s.size();++i){ 33 if(s[i]=='o') L.pb(i),i+=c; 34 if(L.size()==k) break; 35 } 36 for(int i=s.size()-1;i>=0;--i){ 37 if(s[i]=='o') R.pb(i),i-=c; 38 if(R.size()==k) break; 39 } 40 41 for(int i=0;i<k;++i){ 42 if(L[i]==R[k-i-1]) 43 printf("%d\n",L[i]+1); 44 } 45 46 return 0; 47 }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮