Codeforces Round #617 (Div. 3)

A - Array with Odd Sum

题意:你可以更换两个数,要求和是奇数

思路:判断数组里是否有奇数,没有奇数或者数组全是奇数且数组个数为偶数时为NO

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int INF=0x3ffff;
 5 const int maxn=2e4;
 6 int main()
 7 {
 8     int T;
 9     scanf("%d",&T);
10     while(T--)
11     {
12         int n;
13         scanf("%d",&n);
14         int a;
15         int sum=0;
16         bool flag=false;
17         for(int i=0;i<n;i++)
18         {
19             scanf("%d",&a);
20             if(a%2!=0)
21             {
22                 flag=true;
23                 sum++;
24             }
25         }
26         if(!flag||(sum==n&&n%2==0))
27             printf("NO
");
28         else
29             printf("YES
");
30     }
31     return 0;
32 }

B - Food Buying

题意:你有一些钱,花费10元就可以返还一元,且一元也可以用掉,问你花最多多少钱

思路:循环/10,%10,把除以10的加上模10的,原来的钱加上每次除以10后的钱就行了,因为返还后的钱都可以用

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int INF=0x3ffff;
 5 const int maxn=2e4;
 6 int main()
 7 {
 8     int T;
 9     scanf("%d",&T);
10     while(T--)
11     {
12         ll a;
13         cin>>a;
14         ll sum=a;
15         while(a/10!=0)
16         {
17             ll chu=a/10;
18             ll mo=a%10;
19             a=chu+mo;
20             sum+=chu;
21         }
22         cout<<sum<<endl;
23     }
24     return 0;
25 }

 C - Yet Another Walking Robot

题意:给你字符串所组成的路径,可以删除里面的子串,从而终点不变,且删除的长度尽可能小

思路:用map来记录坐标,find来查找当前点有没有走过,没走的话,当前点的值为i+1(就是位置),走过的话,比较i-mp[now](其实就是之前走的位置的值)与INF的大小,只要小就更新,否则继续走

 1 #include <bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const int INF = 0x3ffff;
 5 int main(){
 6     int T;
 7     scanf("%d",&T);
 8     while(T--)
 9     {
10         int n;
11         scanf("%d",&n);
12         string s;
13         cin>>s;
14         int xx=0,yy=0;
15         int len=INF;
16         map<pair<int,int>,int>mp;
17         mp[{xx,yy}]=0;
18         int l=0,r=0;
19         for(int i=0;i<n;i++)
20         {
21             if(s[i]=='L')xx--;
22             else if(s[i]=='R')xx++;
23             else if(s[i]=='U')yy++;
24             else yy--;
25             pair<int,int>now={xx,yy};
26             if(mp.find(now)!=mp.end())
27             {
28                 if(i-mp[now]<len)
29                 {
30                     len=i-mp[now];
31                     l=mp[now];
32                     r=i+1;
33                 }
34             }
35             mp[now]=i+1;
36         }
37         if(len>n)
38             printf("-1
");
39         else
40             printf("%d %d
",l+1,r);
41     }
42     return 0;
43 }
原文地址:https://www.cnblogs.com/Vampire6/p/12262290.html