Codeforces Round #160 (Div. 2) B - Roma and Changing Signs
题目:http://codeforces.com/contest/262/problem/B
n个数按不递减的顺序排好 k次取相反数
思路:一边读入数据,一边做取反操作
一开始忽略了有k>n且所有数为负数的情况,导致没有进行k次取反,只进行了n次。
#include <iostream> #include <cstdlib> #include <cmath> using namespace std; int main() { int n,k; long long sum=0; cin >> n >> k; int min=10005; bool odd=false; for(int i=0;i<n;i++) { int temp; cin >> temp; if(min>abs(temp)) min=abs(temp); if(k==0) sum+=temp; else if(temp<0) { sum-=temp; k--; } else if(temp>0) { sum+=temp; if(k%2==0) k=0; else { k=0; odd=true; } } } if (k>0) //此处让我WA数次 { if(k%2==0) odd=false; else odd=true; } if(odd) sum-=2*min; cout << sum ; return 0; }