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;
}