• Codeforces Round #451 (Div. 2)【A,B,C,D,E】【C题:模拟 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 }
  • 相关阅读:
    在消息框中添加帮助按钮
    如何隐藏一个窗口在任务栏
    不透明的形式在c#中
    实现观察者模式在一个非常简单的例子
    更新使用回调模态对话框的内容
    检查Windows应用程序的现有实例,并设置MDI子程序的MDI父窗体
    更改对话框内容的简单方法
    MSIUninstaller.exe(控制台应用程序)
    启用或禁用控制更有效的和有效的方式
    一个c++ OCX,用于在应用程序的任何窗口上绘图
  • 原文地址:https://www.cnblogs.com/pengge666/p/12199273.html
Copyright © 2020-2023  润新知