Codeforces Round #182 (Div. 2)

A. Eugeny and Array

相当于从数组(非-1即1)里随意取l-r+1个数相加问是否可能等于0。 

#include<algorithm>
#include<iostream>
using namespace std;
int main(){
	int i,j,t,n,m;
	while(cin>>n>>m){
             i=j=0;
             while(n--){
                       cin>>t;
                       if(t==1) i++;
                       else j++;                
             }              
             int min=i>j?j:i;   
             int l,r;
             while(m--){
                        cin>>l>>r;
                        int s=r-l+1;
                        if(s%2||s/2>min){
                                cout<<0<<endl;
                                continue;        
                        }           
                        cout<<1<<endl;
             }
    }
    return 0;
}


 

B. Eugeny and Play List

记录下每首歌的结束时间,直接遍历就可以过。

PS:后面一次的查询显然在前一次的基础上向后找。

#include<algorithm>
#include<iostream>
using namespace std;

int cd[100005];

int main(){
	int i,j,t,n,m;
	while(cin>>n>>m){
             cd[0]=0;
             for(i=1;i<=n;i++){
                     int c,t;
                     cin>>c>>t;
                     cd[i]=cd[i-1]+c*t;                   
             }
             i=1;
             while(m--){
                 cin>>j;
                 while(cd[i]<j) i++;
                 cout<<i<<endl;       
             }             
    }
    return 0;
}


 

C. Yaroslav and Sequence

        给出2n-1个数,每次可选n个数字改变其正负值,操作次数不限,问所能得到的最大和是多少。

        统计其负数个数为c。

       若c为偶数,则第一次改变c/2个负数,n-c/2个正数的正负号,第二次改变剩下所有负数(为n个),可令所有数为正。

       若c为奇数,n为偶数,则不论如何操作c都为奇数,最好情况下就是c=1(取出一个负数不处理,剩下c为偶数)

       若c为奇数,n为奇数,则操作一次可使c变成偶数。      

#include<algorithm>
#include<iostream>
#include<cmath>
#include<climits>
using namespace std;

int main(){
    int sum,min,i,n,t,c;
    while(cin>>n){
            min=INT_MAX;
            sum=c=0;
            i=2*n-1;
            while(i--){
                       cin>>t;           
                       if(t<0){
                               t*=-1;
                               c++;    
                       }       
                       sum+=t;
                       if(t<min) min=t;
            }
            if((n%2==0)&&(c&1)) sum-=min*2;
            cout<<sum<<endl;
    }
    return 0;    
}


 

D. Yaroslav and Time

      弗洛伊德算法

#include<algorithm>
#include<iostream>
#include<cmath>
#include<climits>
using namespace std;


int n,d;
int a[100];
int dist[100][100];
int xy[100][2];


int main(){
    int i,j,k;
    while(cin>>n>>d){
             for(i=1;i<n-1;i++) cin>>a[i];
             for(i=0;i<n;i++)   cin>>xy[i][0]>>xy[i][1];             
             for(i=0;i<n;i++){
                    for(j=0;j<n;j++){
                            dist[i][j]=(abs(xy[i][0]-xy[j][0])+abs(xy[i][1]-xy[j][1]))*d;         
                    }     
             }
             for(k=1;k<n-1;k++)
                    for(i=0;i<n;i++)
                           for(j=0;j<n;j++){
                                   if(i==j||i==k||j==k) continue;
                                   int temp=dist[i][k]+dist[k][j]-a[k];
                                   if(temp<dist[i][j]) dist[i][j]=temp;                 
                           }
             cout<<dist[0][n-1]<<endl;
    }
    return 0;
}


 

E. Yaroslav and Algorithm
主要让题意给坑了,所谓迭代是重新从命令第一行执行。
#include<iostream>
using namespace std;

int main(){
    for(int i=0;i<9;i++) cout<<i<<"??<>"<<i+1<<endl;
    cout<<"9??>>??0"<<endl;   
    cout<<"??0<>10"<<endl;
    for(int i=0;i<=9;i++) cout<<"?"<<i<<">>"<<i<<"?"<<endl;
    cout<<"?>>??"<<endl;
    cout<<">>?"<<endl;
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值