2786【入门】aabb
#include <bits/stdc++.h>
using namespace std;
int num, aa, bb, temp;
int main()
{
// printf("7744");
// for(int i=30; i<=100; ++i){
// num=i*i;
// if(num>=1000 && num<=9999){
// aa=num/100;
// bb=num%100;
// if(aa%11==0 && bb%11==0){
// printf("%d\n", num);
// }
// }
// }
for(int i=1; i<=9; ++i){
for(int j=0; j<=9; ++j){
num=i*1000+i*100+j*10+j;
temp=sqrt(num);
if(temp*temp==num){
printf("%d\n", num);
}
}
}
return 0;
}
1999【基础】因子个数
#include <bits/stdc++.h>
using namespace std;
int n, temp, ans;
int main()
{
scanf("%d", &n);
for(int i=1; i<=sqrt(n); ++i){
if(n%i==0){
ans+=2;
}
}
temp=sqrt(n);
if(temp*temp==n){
ans--;
}
printf("%d", ans);
return 0;
}
1995【入门】桐桐的计算
#include <bits/stdc++.h>
using namespace std;
int n, ans;
int main()
{
for(int i=0; i<=11; ++i){ //九头鸟的只数
for(int j=0; j<=100; ++j){ //鸡的只数
int k=100-9*i-j; //兔的数量
if(k>=0 && i*2+j*2+k*4==100){
ans++;
printf("%d %d %d\n", i, j, k);
}
}
}
printf("%d", ans);
return 0;
}
1772: 【USACO】牛友
#include <bits/stdc++.h>
using namespace std;
int s, cow1, cow2;
int sum(int n)
{
int ans=1;
for(int i=2; i<=sqrt(n); ++i){
if(n%i==0){
ans+=i;
ans+=n/i;
}
if(i*i==n){
ans-=i;
}
}
return ans;
}
int main()
{
scanf("%d", &s);
for(int i=s; i>0; ++i){ //枚举第一头奶牛
//计算第一头奶牛i的约数和cow2,即第二头奶牛
cow2=sum(i);
//计算第二头奶牛的约数和,看是否等于第一头奶牛的编号
cow1=sum(cow2);
if(cow1==i && cow2!=i){
printf("%d %d", cow1, cow2);
return 0;
}
}
}
1196: 【基础】圆环上求素数
#include <bits/stdc++.h>
using namespace std;
int a[20], l, num, cnt, ans[11];
//判断是否为素数
bool prim(int n)
{
if(n<2){
return false;
}
for(int i=2; i<=sqrt(n); ++i){
if(n%i==0){
return false;
}
}
return true;
}
int main()
{
scanf("%d", &l);
for(int i=0; i<=9; ++i){
a[i]=i;
a[i+10]=i; //处理圈的问题
}
for(int i=1; i<=9; ++i){ //起点从1开始
num=0;
for(int j=0; j<l; ++j){ //长度
num=num*10+a[i+j];
}
if(prim(num)){
cnt++;
ans[cnt]=num;
}
}
for(int i=1; i<=cnt; ++i){
printf("%d", ans[i]);
if(i!=cnt){ //不是最后一个数, 输出逗号
printf(",");
}
}
return 0;
}
1257: 【基础】圆环上求素数II
#include <bits/stdc++.h>
using namespace std;
int a[33], l, num, cnt, ans[11], id;
//判断是否为素数
bool prim(int n)
{
if(n<2){
return false;
}
for(int i=2; i<=sqrt(n); ++i){
if(n%i==0){
return false;
}
}
return true;
}
int main()
{
for(int i=0; i<=9; ++i){
scanf("%d", &a[i]);
if(a[i]==1){ //记录1的位置
id=i;
}
a[i+10]=a[i]; //处理圈的问题
a[i+20]=a[i]; //处理圈的问题
}
scanf("%d", &l);
for(int i=id; i<id+9; ++i){ //起点从1开始
num=0;
if(a[i]==0){ //最高位为0
continue;
}
for(int j=0; j<l; ++j){ //长度
num=num*10+a[i+j];
}
if(prim(num)){
cnt++;
ans[cnt]=num;
}
}
for(int i=1; i<=cnt; ++i){
printf("%d", ans[i]);
if(i!=cnt){ //不是最后一个数, 输出逗号
printf(",");
}
}
return 0;
}
1569: 【NOIP98普及组】1:2:3
#include <bits/stdc++.h>
using namespace std;
int num1, num2, num3;
bool vis[11];
int main()
{
for(int a=1; a<=9; ++a){
if(vis[a]){
continue;
}
vis[a]=true;
for(int b=1; b<=9; ++b){
if(vis[b]){
continue;
}
vis[b]=true;
for(int c=1; c<=9; ++c){
if(vis[c]){
continue;
}
vis[c]=true;
for(int d=1; d<=9; ++d){
if(vis[d]){
continue;
}
vis[d]=true;
for(int e=1; e<=9; ++e){
if(vis[e]){
continue;
}
vis[e]=true;
for(int f=1; f<=9; ++f){
if(vis[f]){
continue;
}
vis[f]=true;
for(int g=1; g<=9; ++g){
if(vis[g]){
continue;
}
vis[g]=true;
for(int h=1; h<=9; ++h){
if(vis[h]){
continue;
}
vis[h]=true;
for(int i=1; i<=9; ++i){
if(vis[i]){
continue;
}
vis[i]=true;
num1=a*100+b*10+c;
num2=d*100+e*10+f;
num3=g*100+h*10+i;
if(num1*2==num2 && num1*3==num3){
printf("%d %d %d\n", num1, num2, num3);
}
vis[i]=false;
}
vis[h]=false;
}
vis[g]=false;
}
vis[f]=false;
}
vis[e]=false;
}
vis[d]=false;
}
vis[c]=false;
}
vis[b]=false;
}
vis[a]=false;
}
return 0;
}
1496: 【USACO】晚餐队列安排
好题,思维,前缀和
#include <bits/stdc++.h>
using namespace std;
int n, a[30010], num1, num2, ans=30010, cnt1[30010], cnt2[30010], temp;
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; ++i){
scanf("%d", &a[i]);
if(a[i]==1){
cnt1[i]=cnt1[i-1]+1; //记录a[1]~a[i]有多少个1
cnt2[i]=cnt2[i-1]; //延续上一个
num1++;
}
else{
cnt2[i]=cnt2[i-1]+1; //记录a[1]~a[i]有多少个2
cnt1[i]=cnt1[i-1]; //延续上一个
num2++;
}
}
ans=min(num1, num2); //全1或者全2
for(int i=1; i<n; ++i){ //枚举1的队尾
//a[1]~a[i]的2都变为1, a[i+1]~a[n]的1都变为2
temp=cnt2[i]+cnt1[n]-cnt1[i];
ans=min(ans, temp);
}
printf("%d", ans);
return 0;
}
1522: 【USACO】第一次,第二次,成交!
#include <bits/stdc++.h>
using namespace std;
const int M=1010;
int n, m, p[M], curprice, price, curans, ans;
int main()
{
scanf("%d %d", &n, &m);
//m个客户的出价
for(int i=1; i<=m; ++i){
scanf("%d", &p[i]);
}
sort(p+1, p+m+1);
for(int i=1; i<=m; ++i){
curprice=p[i];
curans=min(n, m-i+1)*curprice;
if(curans>ans){
ans=curans;
price=curprice;
}
}
printf("%d %d", price, ans);
return 0;
}
1595: 【USACO】Claustrophobic Cows(患自闭症的牛)
#include <bits/stdc++.h>
using namespace std;
int n, ans1, ans2;
long long mn=3e10;
struct cow
{
int id;
long long x, y;
}a[2010];
long long cal(int p, int q)
{
return (a[p].x-a[q].x)*(a[p].x-a[q].x)+(a[p].y-a[q].y)*(a[p].y-a[q].y);
}
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; ++i){
a[i].id=i;
scanf("%lld %lld", &a[i].x, &a[i].y);
}
for(int i=1; i<n; ++i){
for(int j=i+1; j<=n; ++j){
if(cal(i, j)<mn){
mn=cal(i, j);
ans1=i;
ans2=j;
}
}
}
printf("%d %d", ans1, ans2);
return 0;
}
1586: 【USACO】牛棚回声
//最长公共子序列
#include <bits/stdc++.h>
using namespace std;
int length1, length2, mx, temp;
string s1, s2;
int main()
{
cin >> s1;
cin >> s2;
length1=s1.length();
length2=s2.length();
for(int i=0; i<length1; ++i){ //枚举第一个字符串的起点
for(int j=0; j<length2; ++j){ //枚举第二个字符串的起点
if(s1[i]==s2[j]){ //如果两个起点相同
temp=1; //公共长度记为1
while(1){ //看后面的第temp位是否也相同
if(s1[i+temp]==s2[j+temp]){ //相同
temp++; //最长公共子序列长度加一
}
else{ //只要某一位不同
break; //跳出
}
}
mx=max(mx, temp); //更新擂主
}
}
}
printf("%d", mx);
return 0;
}
1792: 【NOIP08提高组】火柴棒等式
#include <bits/stdc++.h>
using namespace std;
int n, a[10]={6, 2, 5, 5, 4, 5, 6, 3, 7, 6}, ans, cnt;
int cal(int x)
{
int asd=0;
if(x==0){
return 6;
}
while(x){
asd+=a[x%10];
x/=10;
}
return asd;
}
int main()
{
scanf("%d", &n);
n-=4; //最多20根火柴可以用来拼数字
for(int i=0; i<=1000; ++i){
for(int j=0; j<=1000; ++j){
if(cal(i)+cal(j)+cal(i+j)==n){
// printf("%d + %d = %d\n", i, j, i+j);
// printf("%d %d %d\n", cal(i), cal(j), cal(i+j));
ans++;
}
}
}
ans-=cnt;
printf("%d", ans);
return 0;
}