Codeforces Round #451 (Div. 2)A,B,C,D,EC题:模拟 D题:尺取+贪心 E题:思维+优先队列维护最值
Posted pengge666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #451 (Div. 2)A,B,C,D,EC题:模拟 D题:尺取+贪心 E题:思维+优先队列维护最值相关的知识,希望对你有一定的参考价值。
特判最后一位即可
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 #define int long long 5 6 signed main(){ 7 int n;cin>>n;int t=n%10; 8 if(t==0) cout<<n; 9 else if(t>5) { 10 cout<<(n+10-t); 11 } 12 else { 13 cout<<(n-t); 14 } 15 return 0; 16 }
暴力就OK了
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 #define int long long 5 6 signed main(){ 7 int n,a,b; 8 cin>>n>>a>>b; 9 for(int i=0;;i++){ 10 if((n-i*a)%b==0&&(n-i*a)>=0){ 11 cout<<"YES"<<‘ ‘; 12 cout<<i<<" "<<(n-i*a)/b; 13 return 0; 14 } 15 if(a*i>n){ 16 break; 17 } 18 } 19 cout<<"NO"; 20 return 0; 21 }
一道模拟题。
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 #define int long long 5 vector<string> v[66666]; 6 vector<string> ans[66666]; 7 map<string,int> vis; 8 string st[66666]; 9 signed main(){ 10 int n; 11 cin>>n; 12 int cnt=1; 13 for(int i=1;i<=n;i++){ 14 string str; 15 cin>>str; 16 if(!vis[str]){ 17 vis[str]=cnt; 18 st[cnt]=str; 19 cnt++; 20 } 21 int m; 22 cin>>m; 23 for(int j=0;j<m;j++){ 24 string tle; 25 cin>>tle; 26 v[vis[str]].push_back(tle); 27 } 28 } 29 for(int i=1;i<cnt;i++){ // vector实现去重 30 sort(v[i].begin(), v[i].end()); 31 v[i].erase(unique(v[i].begin(), v[i].end()), v[i].end()); 32 } 33 34 //cout<<‘ ‘; 35 for(int i=1;i<cnt;i++){ 36 map<string,int> mp; 37 for(int j=0;j<v[i].size();j++){ 38 int f=0; 39 string temp=v[i][j]; 40 int len=temp.size(); 41 for(int k=0;k<v[i].size();k++){ 42 if(temp==v[i][k]) continue; 43 if(v[i][k].size()>temp.size()){ //后缀 44 if(temp==v[i][k].substr(v[i][k].size()-len,len)){ 45 f=1; 46 break; 47 } 48 } 49 } 50 if(f){ 51 mp[temp]=1; 52 } 53 } 54 for(int j=0;j<v[i].size();j++){ 55 if(!mp[v[i][j]]) 56 ans[i].push_back(v[i][j]); 57 } 58 } 59 cout<<cnt-1<<‘ ‘; 60 for(int i=cnt-1;i>=1;i--){ 61 cout<<st[i]<<" "<<ans[i].size()<<" "; 62 for(int j=0;j<ans[i].size();j++){ 63 if(!j) cout<<ans[i][j]; 64 else cout<<" "<<ans[i][j]; 65 } 66 cout<<‘ ‘; 67 } 68 return 0; 69 }
尺取+贪心
题意 : 给你n个闹钟,分别在aiai分钟响。要求在任意m分钟内,不能多余k个闹钟响,否则就会醒来,求关闭的最少的闹钟数
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 #define maxn 666666 5 #define int long long 6 int arr[maxn]; 7 signed main(){ 8 int n,m,k; 9 cin>>n>>m>>k; 10 for(int i=1;i<=n;i++) cin>>arr[i]; 11 sort(arr+1,arr+1+n); 12 int ans=0; 13 deque<int> q; 14 for(int i=1;i<=n;i++){ 15 while(!q.empty()&&arr[i]-q.front()>=m) q.pop_front(); 16 if(q.size()>=k-1){ 17 ans++; 18 }else{ 19 q.push_back(arr[i]); 20 } 21 22 } 23 cout<<ans; 24 return 0; 25 }
题意:给你n个数,现在你可以进行一系列操作,每次操作可以对任意一个数加一或者减一,使得进行操作后n个数中恰好有一半是平方数还有一半是非平方数。
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define int long long 4 priority_queue<int,vector<int>, greater<int> > q1;//平方数 5 priority_queue<int,vector<int>, greater<int> > q2;//非平方数 6 signed main(){ 7 int n; 8 cin>>n; 9 int sum1=0;//平方数 10 int sum2=0;//非平方数 11 for(int i=1;i<=n;i++){ 12 int t;cin>>t; 13 int cnt=(int)sqrt(t*1.0); 14 if(cnt*cnt==t){ 15 sum1++; 16 if(t) q1.push(1); 17 else q1.push(2); 18 }else{ 19 sum2++; 20 int temp=min((cnt+1)*(cnt+1)-t,t-cnt*cnt); 21 q2.push(temp); 22 } 23 } 24 if(sum1==sum2&&sum1==n/2){ 25 cout<<"0"; 26 return 0; 27 } 28 if(sum1>n/2){ 29 int sum=0; 30 int _=abs(sum1-n/2); 31 while(_--){ 32 sum+=q1.top(); 33 q2.pop(); 34 } 35 cout<<sum; 36 return 0; 37 } 38 int add=0; 39 int _=abs(sum2-n/2); 40 while(_--){ 41 add+=q2.top(); 42 q2.pop(); 43 } 44 cout<<add; 45 return 0; 46 }
以上是关于Codeforces Round #451 (Div. 2)A,B,C,D,EC题:模拟 D题:尺取+贪心 E题:思维+优先队列维护最值的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #451 (Div. 2) ABC
Codeforces Round #451 (Div. 2) D. Alarm Clock
Codeforces Round #451 (Div. 2) DAlarm Clock
Codeforces Round #451 Div. 2 C D E
Codeforces Round #451 (Div. 2) F Restoring the Expression
Codeforces Round #451 (Div. 2)F. Restoring the Expression 字符串hash